#1 22.01.10 12:52
Простая реализация ACL
поискал по сабжу в инете, все реализации сводятся либо к установке доп пакетов (phpGACL) либо к ковырянию реализаций в фреймоворках (cake, kohana и тд), но чёт это слишком мощно для , на первый взгляд, просто задачи.
допустим есть группы пользователей: administrator, moderator, member, guest. и есть сущности, например forum, blog, gallery и тд. и есть действия read, edit, delete, add
как я вижу реализацию на пхп+бд
создаём таблицу в базе вида
administrator moderator member guest
blog 1111 1101 1001 1000
forum 1111 1101 1001 0000
где 1111 - это есть read, edit, delete, add. 1-да, 0-нет.
и допустим в главном классе в сущности, в конструкотре делаем запрос к бд и получаем "маску прав". но как в пыхе оптимально узнать допустим может ли группа читать форум? можно маску делить бить на символы и циклом выдёргивать значение, но это неоптимально кажется
Offline
#2 22.01.10 13:02
Re: Простая реализация ACL
в пхп не работал, но необходимый бит маски можно извлекать побитовыми сдвигами влево и вправо
Offline
#4 22.01.10 13:06
Re: Простая реализация ACL
Graf Generator написал(а):
в пхп не работал, но необходимый бит маски можно извлекать побитовыми сдвигами влево и вправо
(int)~set::Get(); написал(а):
битовые операции? :)
да..нашёл как работать с ними
http://www.rinatous.com/blog/node/1.html
Offline
#5 31.01.10 14:15
Re: Простая реализация ACL
Хорошее решение, сам такое не раз применял, однако если потом будет наследование привилегий, то либо придётся писать запросы с трёхэтажными джоинами, либо в php циклы гонять вложенные :)
А вообще нужный бит можно сразу из БД извлекать, типа
SELECT ....
IF(field & 8 > 0, 1, 0) AS delete,
..
Исправлено A-Lex (31.01.10 14:17)
Offline

