Официальный сайт студ.городка НГТУ
Программирование и БД » Простая реализация ACL 

#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

#3  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

#6  31.01.10 19:38

Re: Простая реализация ACL

а я бы нормализовал это дело, т.е.
таблица групп, таблица сущностей, таблица связи + 4 булевых колонки

Offline

#7  08.02.10 18:12

Re: Простая реализация ACL

ну так эти вот биты и есть практически нормализация грубая )

Offline

Программирование и БД » Простая реализация ACL 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.029 сек.
Выполнено 14 запросов.