MODX - права доступа

Права доступа в MODX тоже сделаны непривычно. Так называемый ABAS(Attribute-Based Access Control). Сейчас же наиболее популярен RBAS (Role-Based Access Control). Когда я попытался нахрапом разобраться в них пол-года назад, сразу же бросил это занятие до лучших времен). Как и многое в MODX показалось уж слишком сложным. Оказалось очень гибким решением. И не очень сложным. Ну это всегда так кажется, когда разберешься). Короче тут все завязано на атрибутах.

Тут все сделано на атрибутах. Т.е. любой сущности, с которой может взаимодействовать пользователь, можно назначить любой аттрибут доступа. С другой стороны пользователю через группы пользователей сопоставляется ACL(Access Control List), т.е. список доступа. И если в этом списке назначен такой-же атрибут, то доступ предоставляется. Ну это коротко. Рассмотрим подробнее. Структура ACL такая:

  • Объект запрашивающий доступ(Principal). Доступ запрашивается не конкретным пользователем, а группой пользователей(User Group)
  • Объект доступа(Target). Контексты(web, mgr), Группы ресурсов(страницы и проч.), Источники файлов, Категории элементов(чанки и проч.)
  • Политика доступа(Access Policy) - содержит список разрешений приобретаемых по этому ACL.
  • Минимальный уровень доступа или ранг пользователя(Authority) для использования этого ACL.

Структура ACL MODX

Меня поразила легкость добавления своих разрешений. Например при добавлении своего компонента в бэкеднде. Чтобы контролировать доступ к меню компонента достаточно проставить в "Привилегии"("Настройка"->"Действия") например -"myCompCounters". Далее создать новый Шаблон политик доступа и добавить туда такой же аттрибут. Можно использовать и существующий. Ну и включить его в нужной политике доступа. И все! Все начинает контролироваться.

Аналогично если хотите ограничить доступ к процессору(естественно к своему), то присваиваем свойству permission любой атрибут (myProcessor->permission='myProcGetList';). Далее как описано выше.

А тонкости следующие.

  • ACL работает по принципу Allow/Disallow
    • Если атрибут разрешения никто не запрашивает, объект доступен всем.
    • Если есть желающий с таким же включенным разрешением в ACL, остальные сразу теряют доступ. И это нормальное поведение.
      • И вот тут некоторые "шибко умные" чтоб восстановить доступ админу предлагают что-то удалять в политиках группы имеющей доступ. Это все "костыли".
      • Это можно сделать различными "легальными" путями
        • Для восстановления доступа Админу можно
          • Добавить админа в группу операторов
          • Добавить разрешения в ACL для группы админов. Т.к. стандарные ACL лучше не трогать. (Я для этих целей создал политику "adm_ext", куда кидаю все новые permission. И естественно добавил ее в ACL для админов.)
          • Можно вообще все упростить
            • Не создавать группы операторов
            • Добавить оператора в группу админов с "позорной" ролью 9999
            • А в ACL добавить для админов политику "Для операторов" с минимальной ролью 9999, при этом все остальные политики должны иметь минимальную роль больше чем 9999.
            • При этом все админы унаследуют разрешения от политики "Для операторов", поскольку обладают более низкой ролью.
            • А операторы не получат разрешений админов.
            • Недостатки. Не подойдет, если есть несколько компонентов и надо закрыть доступ операторам из "другого компонента".

На деле при обращении к объекту, при наличии "разрешения"(permission) система выбирает все "разрешения" из всех ACL для пользователя в массив. Далее если "разрешение" объекта есть в массиве то предоставляется доступ. Причем в массив этот включаются и унаследованные, те, что предоставлены пользователям группы с большим рангом(ролью). Как оказалось, очень гибкая система. Ну а некоторая замороченность - это уж плата за мощь. Ну не бывает, наверное, чтоб просто и хорошо. Хотя сейчас мне не кажется уж таким сложным как поначалу. Да и в форумах многие панику наводят. Просто нужно посидеть пару дней, ручками пошарить).

Жаль, что нет в стандартной настройке "вычисляемых и условных" атрибутов. Что является обычным в ABAS. Но это можно реализовать самому. Наверное...


Комментарии 0






Разрешённые теги: <b><i><br>Добавить новый комментарий: