6.2.7. Предыдущая реализация ролей и разрешений

До CUBA 7.2 метод расчета действующих разрешений был другим:

  1. Было два типа разрешений: "разрешить" и "запретить".

  2. Если никакая роль не запрещала целевой объект, то он был разрешен.

  3. Разрешение могло быть дано либо явно путем указания "allow/deny" для целевого объекта, или ролью определенного типа, например роль "Denying" давала разрешение "deny" всем объектам кроме атрибутов сущностей. Если целевой объект не получал явных разрешений, либо разрешений от типа роли, он был полностью доступен пользователю. В результате, пользователь вообще без ролей имел полные права на систему.

При настройке ролей, рекомендовалось сначала давать обычным пользователям роль "Denying", а затем набор ролей с явными разрешениями. Теперь запрещающая роль не нужна, так как пользователи не имеют никаких прав на объекты, пока соответствующие разрешения не даны им какой-либо ролью.

Кроме того, в предыдущих версиях не было областей действия, так что все роли действовали и на клиентов Generic UI и на клиентов REST API.

Поведение подсистемы безопасности управляется несколькими свойствами приложения, которые имеют значения по умолчанию, соответствующие новому поведению. Если вы мигрировали проект на CUBA 7.2 с предыдущей версии, Studio добавляет свойства, приведенные ниже, для переключения в режим старого поведения и сохранения текущей настройки прав доступа. Если вы хотите воспользоваться новыми возможностями (в частности, настройкой ролей во время разработки) и перенастроить подсистему безопасности, удалите эти свойства.

В модуле core, устанавливаются свойства для предыдущего поведения, использования конфигурационного файла default-permission-values.xml и игнорирования роли system-minimal:

app.properties
cuba.security.rolesPolicyVersion = 1
cuba.security.defaultPermissionValuesConfigEnabled = true
cuba.security.minimalRoleIsDefault = false

Если в проекте используется аддон REST API, в модулях web и portal добавляется следующее свойство для того, чтобы установить область действия контроля доступа REST в то же значение, что используется в Generic UI:

web-app.properties
cuba.rest.securityScope = GENERIC_UI
portal-app.properties
cuba.rest.securityScope = GENERIC_UI