5. Контроль доступа к данным
В нашем приложении уже есть роли Employees и HR Managers. В этой главе мы покажем, как изменить их, добавив новые ограничения.
Ресурсная роль для сотрудников
Сотруднику необходимо читать экземпляры сущности WebdavDocumentWrapper, чтобы просматривать их в UI.
Дважды щелкните на Security → EmployeeRole ресурсная роль в окне Jmix tool.
Перейдите на вкладку User Interface, чтобы определить права доступа к экранам. Выберите WebdavDocumentWrapper.list и WebdavDocumentWrapper.detail в дереве меню и установите флажки Allow справа:
После этого перейдите на вкладку Entities и выберите следующие права доступа:
Ресурсная роль для HR-менеджеров
HR-менеджерам необходимо загружать документы, удалять документы и редактировать содержимое документов.
Дважды щелкните на Security → HRManagerRole ресурсная роль в окне Jmix tool.
Перейдите на вкладку User Interface и разрешите WebdavDocumentWrapper.list и WebdavDocumentWrapper.detail.
Перейдите на вкладку Entities.
Предоставьте все права доступа для сущности WebdavDocumentWrapper.
Роль уровня строк WebDavDocumentsDepartmentRole
В этом разделе вы создадите роль уровня строк, которая ограничивает доступ к документам WebDAV для сотрудника.
Если у сотрудника роль HR Manager или Administrator, то отображаются все документы WebDAV.
Если у сотрудника роль Employee, отображаются только документы WebDAV, относящиеся к отделу сотрудника.
В окне инструмента Jmix нажмите New () → 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 введите:
-
Entity:
WebdavDocumentWrapper -
Where clause:
{E}.department = :current_user_department
Нажмите OK.
Назначение ролей
Теперь назначим роли пользователям.
Запустите приложение и откройте список Users. Выберите пользователя alice и нажмите кнопку Role assignments:
На экране Role assignments нажмите кнопку Add на панели Resource roles.
В диалоговом окне Select resource roles выберите роль WebDAV: minimal access. Нажмите Select.
Роль WebDAV: minimal access требуется для всех пользователей, которым нужна функциональность WebDAV. Она предоставляет базовый доступ ко всем сущностям, связанным с WebDAV, в системе.
|
Убедитесь, что у пользователя alice есть следующие ресурсные роли и роли уровня строк:
Добавьте ресурсную роль WebDAV: minimal access для пользователя bob.
Нажмите кнопку Add на панели Row-level roles.
В диалоговом окне Select row-level roles выберите роль web-dav-documents-department. Нажмите Select.
Убедитесь, что у пользователя bob есть следующие ресурсные роли и роли уровня строк:
Войдите как alice.
alice — HR-менеджер. Поэтому этот пользователь может просматривать все документы WebDAV, загруженные в систему, загружать новые документы, удалять документы и редактировать содержимое документов.
Убедитесь в этом, открыв экран Knowledge base.
Войдите как bob.
bob — сотрудник. Поэтому этот пользователь может просматривать только документы WebDAV, относящиеся к его отделу. Такой пользователь может только скачивать документы WebDAV с помощью кнопки Download, но не может создавать или удалять их.
Убедитесь в этом, открыв экран Knowledge base.
Как видите, кнопки Create и Remove недоступны для этого пользователя.
Итоги
В этом разделе вы изменили роли HR-менеджеров и сотрудников, чтобы ограничить доступ к приложению для разных групп пользователей.
Вы узнали, что:
-
Ресурсная роль предоставляет пользователям доступ к экранам и возможность взаимодействовать с определенными сущностями.
-
Роль уровня строк, в отличие от ресурсной, используется для ограничения возможности пользователя читать определенные строки данных.
-
Роли назначаются пользователям во время выполнения на экране Role assignment, доступном из экрана
User.detail. -
Роль
WebDAV: minimal accessтребуется всем пользователям, которым нужна функциональность WebDAV.