Система управления правами доступа

foma19

Новичок
Система управления правами доступа

Решил реализовать систему управления правами доступа. Идея такая: строим дерево всего сайта. где будут динамические записи(проекты и задачи к ним, например), то мы добавляем в это дерево айдишники созданных записей. вот что примерно будет получатся:
<ul>
<li>Сайт
<ul>
<li>Статические страницы
<ul>
<li>Главная</li>
<li>О компании</li>
<li>Контактная информация</li>
</ul>
</li>
<li>Проекты
<ul>
<li>Проект1</li>
<li>Проект2
<ul>
<li>Задачи
<ul>
<li>Задача1
<ul>
<li>Комментарии
<ul>
<li>Комментарий1</li>
<li>Комментарий2</li>
<li>Комментарий3</li>
<li>Комментарий4</li>
</ul>
</li>
</ul>
</li>
<li>Задача2</li>
</ul>
</li>
</ul>
</li>
<li>Проект3</li>
</ul>
</li>
</ul>
</li>
</ul>

Так же есть таблица с правами.

id | group_id | user_id | tree_id | rights

поле rights это будет битовая маска: 01001 что-то вроде этого

Забиваем эту таблицу правами и если нам нужно допустим узнать права на задание с id 10, например, то мы вытаскиваем задание, смотрим id в дереве и рекурсивно берем права и применяем "&". в итоге получим результирующие права к этой задаче.

Как считаете стоит вообще реализовывать такую систему? Или подскажите как проще реализовать разграничение к любому объекту сайта? будь то весь сайт или определенная запись в таблице с задачами или проектами
 

foma19

Новичок
с помощью gacl можно управлять правами чего угодно на сайте?
 

RUNET

Новичок
я себе сделал только для администрирования пока.

внес в базу каждый модуль и его методы
таблица вида
module_id, method, access, user_id, group_id

при обращении к какой либо странице, оcуществляется 1 sql запрос, с именем модуля и user_id/group_id
и все доступные методы для того модуля на который пришел юзвер пишутся в массив.
есть запись в массиве, велком, нет, получи фашист ошибку
15 минут и готово.

ну это для моего кода...
ибо
Код:
$controller->$method();

...
public function ... (){...}
 

foma19

Новичок
ну мне нужно не просто модуль-действие. мне нужно как на модули и действия так и на отдельные записи таблицы
 

RUNET

Новичок
Автор оригинала: triumvirat
RUNET
а зачем в таблице нужен ID пользователя? Group ID же достаточно!
Чтобы давать права отдельно конкретному юзеру.
не создавать же ему отдельную группу?
 

Духовность™

Продвинутый новичок
Вообще то куда логичнее создавать группы как основополагающие сущности, оперирующие с правами, а уже в эти группы добавлять пользователей. Ведь реально же в большинстве проектов количество групп и, как следствие, количество разных комбинаций прав, меньше, чем количество самих пользователей.
 

RUNET

Новичок
Автор оригинала: triumvirat
Вообще то куда логичнее создавать группы как основополагающие сущности, оперирующие с правами, а уже в эти группы добавлять пользователей. Ведь реально же в большинстве проектов количество групп и, как следствие, количество разных комбинаций прав, меньше, чем количество самих пользователей.
не, я о том что может быть редкое исключение, когда юзеру надо дать чуть больше прав чем в его группе.
такое бывает крайне редко, но бывает...
предусмотрительный типо.

зы если че, от одного лишнего поля никто не умирал, даже если оно не используется.
записей там по сути не много.
 

AmdY

Пью пиво
Команда форума
RUNET
пользователь при подходе triumvirat может состоять одновременно в нескольких группах.
я предпочитаю делать права на контроллер-экшин отдельно, а если нужно на запись, то его проще всунуть в модель, чем делать одну супергибкую систему.
 

foma19

Новичок
Получается gacl как раз и использует предложенное мной дерево если дело касается динамических записей? И по такой системе легко осуществлять соответствие каждой части сайта правам.

в разделе "Объекты расширения доступа (AXO)" вроде об этом и речь, верно?
 

RUNET

Новичок
Автор оригинала: AmdY
RUNET
пользователь при подходе triumvirat может состоять одновременно в нескольких группах.
я предпочитаю делать права на контроллер-экшин отдельно, а если нужно на запись, то его проще всунуть в модель, чем делать одну супергибкую систему.
тут система не глобальная, учитывается только то, что нужно.
особенно учитывается то, что задачи ставят те, кто к вебу отношения не имеет.
потому приходится перестраховываться.

зы под контроллер/экшен не делал потому что проще в группе огранизововать. 2 галочки тык и гут :)
несколько групп у одного юзера, ну не знаю.
решил сделать так как есть.
 
Сверху