5. Контроль доступа к данным

В нашем приложении уже есть роли Employees и HR Managers. В этой главе мы покажем, как изменить их, добавив новые ограничения.

Ресурсная роль для сотрудников

Сотруднику необходимо читать экземпляры сущности WebdavDocumentWrapper, чтобы просматривать их в UI.

Дважды щелкните на Security → EmployeeRole ресурсная роль в окне Jmix tool.

Перейдите на вкладку User Interface, чтобы определить права доступа к экранам. Выберите WebdavDocumentWrapper.list и WebdavDocumentWrapper.detail в дереве меню и установите флажки Allow справа:

employee role

После этого перейдите на вкладку Entities и выберите следующие права доступа:

employee role 2

Ресурсная роль для HR-менеджеров

HR-менеджерам необходимо загружать документы, удалять документы и редактировать содержимое документов.

Дважды щелкните на Security → HRManagerRole ресурсная роль в окне Jmix tool.

Перейдите на вкладку User Interface и разрешите WebdavDocumentWrapper.list и WebdavDocumentWrapper.detail.

hr manager role

Перейдите на вкладку Entities.

Предоставьте все права доступа для сущности WebdavDocumentWrapper.

hr manager role 2

Роль уровня строк WebDavDocumentsDepartmentRole

В этом разделе вы создадите роль уровня строк, которая ограничивает доступ к документам WebDAV для сотрудника.

Если у сотрудника роль HR Manager или Administrator, то отображаются все документы WebDAV.

Если у сотрудника роль Employee, отображаются только документы WebDAV, относящиеся к отделу сотрудника.

В окне инструмента Jmix нажмите New (add) → Row-level Role. В диалоговом окне New Row-level Role введите:

  • Role name: WebDav documents department

  • Role code: web-dav-documents-department

  • Class: com.company.onboarding.security.WebDavDocumentsDepartmentRole

Нажмите OK.

Studio создаст и откроет аннотированный интерфейс:

@RowLevelRole(name = "WebDav documents department", code = WebDavDocumentsDepartmentRole.CODE)
public interface WebDavDocumentsDepartmentRole {
    String CODE = "web-dav-documents-department";
}

Нажмите Add Policy → JPQL Policy на верхней панели действий:

add jpql policy

В диалоговом окне Add JPQL Policy введите:

  • Entity: WebdavDocumentWrapper

  • Where clause: {E}.department = :current_user_department

add jpql policy 2

Нажмите OK.

Назначение ролей

Теперь назначим роли пользователям.

Запустите приложение и откройте список Users. Выберите пользователя alice и нажмите кнопку Role assignments:

role assign 1

На экране Role assignments нажмите кнопку Add на панели Resource roles.

В диалоговом окне Select resource roles выберите роль WebDAV: minimal access. Нажмите Select.

Роль WebDAV: minimal access требуется для всех пользователей, которым нужна функциональность WebDAV. Она предоставляет базовый доступ ко всем сущностям, связанным с WebDAV, в системе.

Убедитесь, что у пользователя alice есть следующие ресурсные роли и роли уровня строк:

role assign 2

Добавьте ресурсную роль WebDAV: minimal access для пользователя bob.

Нажмите кнопку Add на панели Row-level roles.

В диалоговом окне Select row-level roles выберите роль web-dav-documents-department. Нажмите Select.

Убедитесь, что у пользователя bob есть следующие ресурсные роли и роли уровня строк:

role assign 3

Войдите как alice.

alice — HR-менеджер. Поэтому этот пользователь может просматривать все документы WebDAV, загруженные в систему, загружать новые документы, удалять документы и редактировать содержимое документов.

Убедитесь в этом, открыв экран Knowledge base.

view by alice

Войдите как bob.

bob — сотрудник. Поэтому этот пользователь может просматривать только документы WebDAV, относящиеся к его отделу. Такой пользователь может только скачивать документы WebDAV с помощью кнопки Download, но не может создавать или удалять их.

Убедитесь в этом, открыв экран Knowledge base.

view by bob

Как видите, кнопки Create и Remove недоступны для этого пользователя.

Итоги

В этом разделе вы изменили роли HR-менеджеров и сотрудников, чтобы ограничить доступ к приложению для разных групп пользователей.

Вы узнали, что:

  • Ресурсная роль предоставляет пользователям доступ к экранам и возможность взаимодействовать с определенными сущностями.

  • Роль уровня строк, в отличие от ресурсной, используется для ограничения возможности пользователя читать определенные строки данных.

  • Роли назначаются пользователям во время выполнения на экране Role assignment, доступном из экрана User.detail.

  • Роль WebDAV: minimal access требуется всем пользователям, которым нужна функциональность WebDAV.