6.2.4. Разрешения

Разрешение определяет право пользователя на какой-либо объект или функциональность системы: экран, операцию над сущностью и так далее. Такие объекты, по отношению к разрешенниям, называются целями.

Разрешения даются пользователям путем назначения им ролей.

Пользователь не имеет права на объект, пока соответствующее разрешение не будет дано некоторой ролью. Поэтому пользователи без ролей не имеют никаких прав и не могут иметь доступа к системе через Generic UI и REST API.

Существуют следующие типы разрешений, различаемые по целям:

Разрешения на экраны системы (screen permissions)

Экран может быть либо разрешен, либо запрещен.

Права на экраны проверяются при построении главного меню системы и при создании экранов методом create() интерфейса Screens. Для проверки права на экран в прикладном коде используйте метод isScreenPermitted() интерфейса Security.

Разрешения на операцию c сущностью (entity operation permissions)

Для каждой сущности можно разрешить операции Create, Read, Update, Delete.

См. также раздел Проверки доступа к данным для получения информации о том, как разрешения на операции c сущностью используются различными механизмами фреймворка. Для проверки права на операцию c сущностью в прикладном коде используйте метод isEntityOpPermitted() интерфейса Security.

Разрешения на атрибуты сущности (entity attribute permissions)

Каждый атрибут каждой сущности может быть разрешен для просмотра или для модификации.

См. также раздел Проверки доступа к данным для получения информации о том, как разрешения на атрибуты сущностей используются различными механизмами фреймворка. Для проверки права на атрибут сущности в прикладном коде используйте метод isEntityAttrPermitted() интерфейса Security.

Специфические разрешения (specific permissions)

Разрешения на произвольную именованную функциональность. Набор специфических разрешений для проекта задается в конфигурационном файле permissions.xml.

Пример использования:

@Inject
private Security security;

public void calculateBalance() {
    if (!security.isSpecificPermitted("myapp.calculateBalance"))
        return;
    ...
}
Разрешения на компоненты экранов (screen component permissions)

Разрешения на компоненты экранов позволяют скрывать или переводить в режим "только чтение" любые UI компоненты экрана, даже если они не связаны с сущностями модели данных. Такие разрешения применяются фреймворком после отсылки AfterInitEvent и до BeforeShowEvent.

Разрешения на компоненты экранов отличаются от всех остальных типов разрешений тем, что они только ограничивают права на свои цели. Пока целевой компонент вместе с разрешением "скрыть" или "только чтение" не задан, данный компонент полностью доступен пользователю.

Целевой компонент указывается путем к нему в экране в соответствии со следующими правилами:

  • Если компонент принадлежит экрану, указывается просто идентификатор компонента id.

  • Если компонент принадлежит фрейму, вложенному в экран, то сначала указывается идентификатор фрейма, а затем через точку идентификатор компонента внутри фрейма.

  • Если необходимо установить разрешение для вкладки TabSheet или поля Form, то сначала указывается идентификатор компонента, а затем в квадратных скобках идентификатор соответственно вкладки или поля.

  • Чтобы установить разрешение на действие, необходимо указать идентификатор компонента, содержащего действие, а затем идентификатор действия в угловых скобках. Например: customersTable<changeGrade>.