Технические подробности
Концепция и принципиальная схема работы компонента
Основные понятия: объект, класс доступа, правило, роль, операция.
Объект – имеется в виду объект приложения, который находится под контролем Force Field. Речь может идти, например, о документе, который должен быть доступен лишь определенной группе пользователей, или об отдельном проекте или задаче в CRM-системе. Понятие объекта определяется спецификой приложения, в которое внедрен компонент.
Объекты образуют иерархическую структуру. В ней должен быть корневой объект (root), от которого берет свое начало иерархия объектов. У каждого объекта существует только один родитель, дочерних объектов может быть несколько.
Класс доступа – задает настройки безопасности для конкретного объекта системы. Класс доступа содержит правила, на основании которых принимается решение о разрешении, либо запрещении действия с объектом.
Классы поддерживают наследование инструкций. В этом случае дочерний класс доступа наследует все правила от родительского класса.
Если для какого-либо объекта системы необходимо задать специальные правила доступа, то для этого создается неявный класс. Он может быть либо полностью независимым, либо базироваться на одном из существующих классов доступа.
Правила доступа – набор инструкций, которые позволяют системе принять решение о разрешении, либо запрещении того или иного действия пользователя с конкретным объектом.
Возможна ситуация, когда класс, ассоциированный с определенным объектом системы, не содержит правил доступа, соответствующих данной ситуации. Тогда, если класс не содержит никаких указаний на наследование инструкций, то действие считается запрещенным.
Правило доступа может содержать явное указание на наследование вердикта. В этом случае система анализирует, можно ли выполнить запрашиваемое действие с родительским объектом. Полученный результат (разрешение, либо запрещение) используется для ответа на запрос пользователя к дочернему объекту.
Правила обрабатываются в том порядке, как они заданы в классе доступа.
Роль – используется для упрощения управления правами доступа в системе.
Пользователи в системе объединены в группы, или, другими словами, назначены на роли. Так, например, ряд пользователей, работающих со статьями на сайте, можно объединить в рамках роли “editor”. В этом случае нет необходимости задавать правила доступа для каждого пользователя, правило доступа задается сразу для всех пользователей, назначенных на роль “editor”.
Список ролей, на которые назначен пользователь, наследуется в соответствии с иерархической структурой объектов приложения. Так, например, если на верхнем уровне иерархии пользователь был назначен на роль “user”, а на следующем уровне – на роль “editor”, то на этом уровне иерархической структуры он будет назначен и на роль “user”, и на роль “editor”.
В Force Field имеются три встроенные роли: “everyone”, “user”, “owner”.
“Everyone” – на эту роль назначаются даже те пользователи, которые не ввели логин и пароль для входа в систему; “user” - все пользователи, прошедшие авторизацию в системе.
“Owner” – на эту роль назначается пользователь, который является владельцем объекта. Если владелец объекта не указан, то владельцем данного объекта считает владелец родительского объекта.
Операции – действия пользователя с объектом. Например, чтение, редактирование, удаление, синхронизация и т.д. В Force Field есть встроенная операция – “everything”, обозначающая возможность любых действий с защищенным объектом.
Проверка прав доступа
“Force-Field” выполняет проверку правил доступа к объектам приложения. Результатом его работы является вынесение решения о разрешении или запрещении тех или иных действий пользователя. Каким образом приложение будет реагировать на решение, полученное от “Force-Field”, - детали функционирования самого приложения.
Очень важно четко представлять себе механизм проверки прав доступа к объектам приложения, защищенным с помощью “Force-Field”.
Пользователь обращается к конкретному объекту с намерением совершить ту или иную операцию; например, «чтение» или «редактирование». В контексте этого объекта выполняется проверка прав доступа пользователя.
Проверка прав доступа осуществляется на основе правил, которые содержит класс доступа, ассоциированный с данным объектом. Система ищет правило, соответствующее текущей ситуации в этом классе; если правило не найдено – переходит к анализу базового класса.