9.2.4. Разрешения
Разрешение определяет право пользователя на какой-либо объект или функциональность системы: экран, операцию над сущностью и так далее. Разрешение в зависимости от своего значения может как дать пользователю право на объект, так и отобрать его (то есть по сути являться запрещением).
Tip
|
Если явного разрешения на объект не установлено, пользователь имеет право на этот объект. |
Разрешения представляются экземплярами сущности sec$Permission
и содержат следующие атрибуты:
-
type
- тип разрешения: определяет, на какой тип объектов накладывается разрешение. -
target
- конкретный объект разрешения. Формат представления объекта зависит от типа разрешения. -
value
- значение разрешения. Диапазон значений зависит от типа разрешения.
Рассмотрим типы разрешений:
-
PermissionType.SCREEN
- разрешение на экран системы.В атрибуте
target
указывается идентификатор экрана, атрибутvalue
может иметь значения 0 или 1 (экран запрещен или разрешен соответственно).Права на экраны проверяются при построении главного меню системы и при каждом вызове методов
openWindow()
,openEditor()
,openLookup()
интерфейса Frame.Для проверки права на экран в прикладном коде используйте метод
isScreenPermitted()
интерфейса Security. -
PermissionType.ENTITY_OP
- разрешение на операцию c сущностью.В атрибуте
target
указывается имя сущности и через символ ":" имя операции:create
,read
,update
,delete
. Например:library$Book:delete
. Атрибутvalue
может иметь значения 0 или 1 (операция запрещена или разрешена соответственно).Права на операции с сущностью проверяются при работе с данными через DataManager, а также в связанных с данными визуальных компонентах и стандартных действиях со списками сущностей. В результате права на операции оказывают влияние на поведение клиентских блоков и REST API. При работе с данными непосредственно на Middleware через EntityManager права не проверяются.
Для проверки права на операцию c сущностью в прикладном коде используйте метод
isEntityOpPermitted()
интерфейса Security. -
PermissionType.ENTITY_ATTR
- разрешение на атрибут сущности.В атрибуте
target
указывается имя сущности и через символ ":" имя атрибута, например:library$Book:name
. Атрибутvalue
может иметь значения 0, 1 или 2 (атрибут скрыт, только для чтения, или полностью разрешен соответственно).Права на атрибуты сущностей проверяются только в связанных с данными визуальных компонентах и REST API.
Для проверки права на атрибут сущности в прикладном коде используйте метод
isEntityAttrPermitted()
интерфейса Security. -
PermissionType.SPECIFIC
- разрешение на произвольную именованную функциональность. Такие разрешения удобно использовать вместо ролей, когда нужно бинарное запрещение/разрешение определённой функциональности конкретного проекта, так как роли - это агрегаторы разрешений.В атрибуте
target
указывается код функциональности, атрибутvalue
может иметь значения 0 или 1 (запрещено или разрешено соответственно).Набор специфических разрешений для данного проекта задается в конфигурационном файле permissions.xml.
Пример использования:
@Inject private Security security; private void calculateBalance() { if (!security.isSpecificPermitted("myapp.calculateBalance")) return; ... }
-
PermissionType.UI
- разрешение на произвольный компонент экрана.В атрибуте
target
указывается идентификатор экрана и через символ ":" путь к компоненту. Описание формата пути см. в следующем разделе.
Tip
|
Для проверки разрешений вместо непосредственного использования методов класса |