[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Управление правами пользователя
NitroGenerate
Всем привет. Столкнулся с делемой, не знаю как реализовать управление правами доступа к разделам сайта.


на сайте 50 разделов, максимум 100 будет.
Есть таблица пользователей и таблица доступа, в которой прописаны строчки с доступом:
id_razdela, id_polzovatelya, commenti
Тоесть если мне нужно 48 пользователю выдать доступ к 32 разделу сайта, соответственно:
32, 48, bla-bla-bla
Дальше, в управлении пользователем, выкинул таблицу с чекбоксами, на разделы, 50 маленьких чекбоксов, со значением 1 - подключен, 2- не подключен. Массив чекбоксов, у каждого свой номер равный номеру раздела.
В обработчик передаю массив выставленных чекбоксов.
Начинаю обрабатывать, и тут у меня тупняк...
Я делаю так.
1. проверяю есть ли в бд запись о доступе с таким пользователем и номером категории.
2. если нет, то заношу запись.
тут я остановился, задался вопросом: а что если мне нужно убрать доступ с одного раздела?

Следовательно нужно обработчик делать так: сносить нафиг из базы все строчки с доступом на этого пользователя, и заново записывать. Гемороя меньше, но правильно ли это каждый раз при редактировании пользователя, постоянно перетирать права доступа?


Мой обработчик на данный момент:


if (!empty($_POST['cat_access']))
{
$access_mas = $_POST['cat_access'];
foreach($access_mas as $id_to_access => $go)
{
$query_access=mysql_query("SELECT * FROM user_access WHERE user_id ='".$cur_user['id_user']."' and cat ='".$id_to_access."'");cq();
if(!mysql_num_rows($query_access))
{
mysql_query("INSERT into user_access SET user_id='".$cur_user['id_user']."', cat='".$id_to_access."', comment='".$cur_user['surname']." ".$cur_user['name']."'");cq();
}
}
}



Я его естественно не дописал, после добавления нового права доступа, так как фиг знает как лучше сделать.



Спустя 45 минут, 30 секунд (3.02.2012 - 15:35) alexbel2404 написал(а):
Сделай таблицу с группами пользователей, в таблице пользователей добавь поле группы, сделай таблицу, где будет храниться список групп для пользователя. Потом реализуй возможность давать права доступа на группу или отдельно пользователя. Так проще в будущем будет назначать права.

Если не правильно понял вопроса, извиняюсь smile.gif

Спустя 9 минут, 53 секунды (3.02.2012 - 15:45) NitroGenerate написал(а):
Спасибо за мысль, но...
Мне группы не нужны. Ибо у меня около 30 пользователей, у которых разные комбинации доступа к категориям, а категорий 50 и постоянно комбинации меняются.
Выходит что мне нужно будет делать будет группу для каждой комбинации доступа, и выходит, что... ммм... дай подумаю... 9999... комбинаций... blink.gif

По мне так проще обработчик сделать гибкий...

Есть еще у кого-нибудь идее... хоть что нибудь... sad.gif

Спустя 16 часов, 24 минуты, 41 секунда (4.02.2012 - 08:09) golovolom написал(а):
$query_access=mysql_query("SELECT * FROM user_access WHERE user_id ='".$cur_user['id_user']."' and cat ='".$id_to_access."'");cq(); 

if(!mysql_num_rows($query_access)) // если записи с доступом для этого раздела не было
{
// то дабявим запись с доступом
mysql_query("INSERT into user_access SET user_id='".$cur_user['id_user']."', cat='".$id_to_access."', comment='".$cur_user['surname']." ".$cur_user['name']."'");cq();


}
else //запись была
{

if ($go==закрыть доступ)
// удаляем запись с доступом к разделу для данного юзера
mysql_query("DELETE FROM user_access WHERE user_id ='".$cur_user['id_user']."' and cat ='".$id_to_access."'");



}




думаю как то так.. если ты хочешь по своему способу сделать.

Спустя 27 минут, 32 секунды (4.02.2012 - 08:37) inpost написал(а):
Если 30 пользователей, то групп прав не может быть больше 30, где ты цифры взял в 9999...
Пользователей группируют по их правам. Админ: все права, Модератор: часть прав, ньюсмейкер: права на раздел новости, паблик: права только на чтение.
Юзеру назначается его группа.

Спустя 17 минут, 52 секунды (4.02.2012 - 08:55) golovolom написал(а):
Ещё вариант, в id_razdela сделать текстовым и через пробел например заносить ВСЕ номера разделов к которым доступ открыт. Тогда получится всего по 1 записи в таблице. При доступе к разделу проверять содержит ли строчка с номерами разделов данный номер. Если содержит - допустить.

И так же с обновлением доступа:
<?php

if (!empty($_POST['cat_access']))
{
$access_mas = $_POST['cat_access'];
foreach($access_mas as $id_to_access => $go)
{
if ($go) // открыть доступ к разделу
// добавить к полю пробел+номер раздела+пробел, если такого в записи ещё нет

mysql_query("UPDATE user_access SET cat = CONCAT(cat, ' ".$id_to_access." ') WHERE user_id ='".$cur_user['id_user']."' AND !(cat LIKE ' ".$id_to_access." '))";

else // если значение для данного раздела "запретить"
//вырежем из строчки с номерами номер данного раздела, чем запретим доступ(вырезаем так же с двумя обрамляющими пробелами(илидругими разделителями))


mysql_query("UPDATE user_access SET cat = REPLACE(cat, ' ".$id_to_access." ', '') WHERE user_id ='".$cur_user['id_user']."' AND !(cat LIKE ' ".$id_to_access." '))";

// вообще строчка должна выглядеть так разделитель номер разделитель разделитель номер разделитель и т.д. тогда нормально такой способ будет робить
}
}

Спустя 1 минута, 52 секунды (4.02.2012 - 08:57) golovolom написал(а):
Цитата (inpost @ 4.02.2012 - 05:37)
Если 30 пользователей, то групп прав не может быть больше 30, где ты цифры взял в 9999...
Пользователей группируют по их правам. Админ: все права, Модератор: часть прав, ньюсмейкер: права на раздел новости, паблик: права только на чтение.
Юзеру назначается его группа.

он это взял из количества разделов и различных вариантов "запрещен раздел"- "не запрещён" для одного конкретного пользователя, вроде так. Он хочет пользователю для каждого раздела допуск или запрет выставить, в итоге для каждого юзера доступы запреты разные, а разделов дофига. нет не только деление на модера админа и тд. тут ещё и каждый пользователь на каждый раздел может иметь или не иметь право, ппц какой
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.