Реализация ACL (access controll list). Замылился глаз на алгоритме?

Разрабатываю свой велосипед которому стал нужен acl. Посмотрел реализацию в drupal, cake и тд. ничего не подходит.


Велосипед работает на парадигме MVC, есть сущность и активность (например сущность forum, активность topic). Распределить доступ по пользовательским группам в рамках целого модуля не составляет труда:

class Acl
{
    function __construct()
    {
         $module = $this->router->fetchCurrentModule();
         $gid    = $this->user->getGroupId();

        $query = $db->query('SELECT perm FROM groups_permission WHERE module='.$db->escape($module).' AND gid='.$gid);


        if($query->num_rows())
            $perm = $query->row()->perm;
        else
            $perm = '';
        
        if (strpos($perm, 'access') === FALSE) { // пока ограничение связаны только с доступом, потом можно ввести edit delete и тд.
            show_message('You have no access to this module');
        }
    }
}



Но как быть если я хочу распределить доступ до определенного форума? Можно ввести дополнительную таблицу forum_permission с полями user_id и perm, но как быть с другими модулями в том случае если у них нет такой таблицы. Вообщем ищу алгоритм реализации ACL
  • Вопрос задан
  • 3628 просмотров
Пригласить эксперта
Ответы на вопрос 2
taliban
@taliban
php программист
«Можно ввести дополнительную таблицу forum_permission с полями user_id и perm, но как быть с другими модулями в том случае если у них нет такой таблицы.»
Убираете приставку forum_ в таблице, и добавляете поле `entity_id`
и добавляете таблицу entities где будут все сущности, и форумы, и топики и что захотите, вплоть до нажатия на кнопку.
Ответ написан
Комментировать
ostapbender
@ostapbender
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы