|
|
|
| Подскажите как лучше организовать данные прав доступа.
Имеется таблица разделов сайта:
id, parent_id, name....
и таблица пользователей
id, login...
необходимо как-то хранить информацию о доступе пользователя к каждому из разделов т.е.
id раздела, открыт/закрыт
как лучше поступить?
делать отлельную таблицу для каждого пользователя, делать таблицу для всех пользователей и в ней ставить id пользователя, перечислять все в каком-то поле таблицы пользователей в виде стоки? | |
|
|
|
|
|
|
|
для: allatone
(29.04.2008 в 20:44)
| | А разделов сайта много?
В форуме PHP я натыкался на решение, которое могло бы Вам помочь, но оно ограничено количественно. Каждому разделу сайта присвоить число из порядка: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 и т.д. а пользователю дать соответственно права на один или несколько разделов сайта, права пользователя будут выглядить так: $UserAccess=2+4+32+64 дадут при проверке разрешено ли пользователю посещать этот раздел, а вот и проверка:
<?
if($UserAccess&$Access) echo "Доступ к разделу разрешен"; else echo ":)"
?>
|
т.е. если $Access будет не 2 или 4 или 32 или 64 но доступ будет запрещен | |
|
|
|
|
|
|
|
для: allatone
(29.04.2008 в 20:44)
| | У вас. я вижу, разделы в виде дерева сделаны. Отлично.
У меня контроль доступа в одном проекте так:
Есть таблица с правилами security_rules
rule_id | group_id | entity_id | mode | action | status | owner | type
group_id : группа, для которой существует данное правило
entity_id : id сущности (раздел, документ, комментарий)
mode : уровень (1 - разрешить, 0 - запретить)
action : тип действия (1 - читать, 2 - писать, 3 - редактировать, 4 - удалять)
status: состояние сущности ( 1 - добавлено, 2 - опубликовано, 3- отклонено редактором и т.д. )
owner: владелец (0 - любой, 1- автор)
type: на кого распространятся (1 - раздел, 2 - документ, 3 комментарий)
Для любого поля (кроме mode) значение 0 равносильно (*, любой)
|
Теперь, например:
уровень доступа для группы id=1 и сущности с id = 5 вида 11200 означает: "Разрешено(1) читать(1) опубликованные(2) любого автора(0) любые сущности(0)"
Другое правило, для той же группы и сущности:
12003 - разрешено писать любые комментарии.
13113 - разрешено редактировать свои добавленные комментарии.
Как-то так :) | |
|
|
|