Главный принцип логики определения прав в FORS: запрещено всё, что не разрешено!
Атрибуты доступа
Полный список возможных атрибутов доступа, определяющих права пользователей:
- R – просмотр;
- A – добавление;
- W – изменение/редактирование;
- D – удаление;
- ER – просмотр расширенной информации;
- EW – изменение расширенной информации;
- AR – административный контроль;
- EW – административное управление.
Важно заметить, что набор атрибутов может быть различным в том или ином модуле, более того, назначение атрибутов может быть изменено в зависимости от модуля. Для этого в списке настройки прав модуля атрибуты имеют подсказки, которые содержат информацию о назначении всех атрибутов. Исключение: атрибут R – право на чтение во всех модулях, атрибуты AR, AW – право на просмотр списка назначенных прав и право на изменение списка назначенных прав соответственно.
Подтипы FORS
FORS – относительно универсальная подсистема и может настраиваться для любого модуля сайта. Для этого в FORS определены несколько подтипов секьюрити:
- Объектно-ролевая секьюрити – тип секьюрити, в которой права определяются для всего модуля. В этом случае объектом является весь модуль, а набор атрибутов определяет полный набор возможностей модуля. Например, модуль кодификаторов и справочников. Если пользователь обладает правом на просмотр, то он имеет право просматривать все справочники в данном модуле, несмотря на то, что справочников может быть много и у них сложная структура. Аналогичная логика применима для всех атрибутов доступа данного модуля.
- Объектно-иерархическая ролевая секьюрити – тип секьюрити, который применяется в модулях, которые имеют множество объектов. Например, модуль новостей. Модуль новостей состоит из новостных лент, к каждой новостной ленте привязаны отдельные новости. Новостные ленты и новости представляют собой отдельные объекты модуля, которые образуют иерархию. Данный тип секьюрити позволяет настраивать права на весь модуль, а так же определять права на отдельные объекты. В примере с новостным модулем нам доступны следующие возможности: определение прав на весь модуль, определение прав на новостную ленту (переопределяет общие права на модуль) и на отдельную новость (переопределяет права на новостную ленту). В данном типе секьюрити логика определения прав следующая: если для нижестоящего в иерархии объекта определяются какие-либо права, то они полностью переопределяют права вышестоящего в иерархии объекта. Объектно-иерархическая ролевая секьюрити позволяет разграничивать доступ к объектам одного модуля. В примере с новостным модулем мы можем добавить новостную ленту, новости в которой будут доступны для просмотра только одной группе пользователей, например, VIP-клиентам или группе администраторов сайта. Так же возможно разграничить права на добавление и редактирование новостей различным группам контент-менеджеров.
- Функциональная ролевая секьюрити – тип секьюрити, в которой права определяются для отдельных функций модуля. Данный тип секьюрити применяется в сложных и нестандартных модулях, для которых максимально-возможного набора атрибутов доступа не хватает. При этом для каждой функции может быть определен свой набор атрибутов с различной семантикой. Например, модуль «Файловый менеджер». Для модуля определены 4 функции – доступы до корневых каталогов pub, img, st и templates соответственно. Для каждой функции определён набор атрибутов, которые означают права на просмотр корневого каталога и всех вложенных каталогов и файлов, на создание каталогов и загрузку файлов, на редактирование, перемещение каталогов и файлов, удаление и административный контроль назначенных прав для каждой функции (каждого корневого каталога).
Суммирование прав доступа
Если для модуля, объекта модуля, функции модуля (в зависимости от типа секьюрити) в списке прав доступа определены права для нескольких групп и/или пользователей, а один пользователь может состоять в нескольких группах, и может быть добавлен отдельно. В этом случае права суммируются. Если пользователь находится в группе А и имеет атрибут доступа W, а так же находится в группе B и имеет атрибут доступа D, то на данный модуль/объект модуля/функцию модуля пользователь имеет атрибуты доступа W и D.