6.2.4. Разрешения
Разрешение определяет право пользователя на какой-либо объект или функциональность системы: экран, операцию над сущностью и так далее. Разрешение в зависимости от своего значения может как дать пользователю право на объект, так и отобрать его (то есть по сути являться запрещением).
|
Если явного разрешения на объект не установлено, пользователь имеет право на этот объект. |
Разрешения представляются экземплярами сущности 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 (операция запрещена или разрешена соответственно).См. также раздел Проверки доступа к данным для получения информации о том, как разрешения на операции c сущностью используются различными механизмами фреймворка.
Права на операции с сущностью проверяются при работе с данными через 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указывается идентификатор экрана и через символ ":" путь к компоненту. Описание формата пути см. в следующем разделе.
|
Для проверки разрешений вместо непосредственного использования методов класса |