5. 数据访问控制

在我们的应用程序中,已经有了 EmployeesHR Managers 角色。本节我们将演示如何通过添加新的约束来修改这些角色。

员工的资源角色

员工需要读取 WebdavDocumentWrapper 实体实例,以便能在 UI 中查看。

Jmix 工具窗口中,双击 Security → EmployeeRole 资源角色

切换到 User Interface tab 定义视图许可。在菜单树中选择 WebdavDocumentWrapper.listWebdavDocumentWrapper.detail,然后勾选右侧的 Allow 复选框:

employee role

之后,切换至 Entities tab,按如下选择许可:

employee role 2

HR 经理的资源角色

HR 经理需要能上传、删除文档,以及编辑文档内容。

Jmix 工具窗口中,双击 Security → HRManagerRole 资源角色

切换到 User Interface tab 允许 WebdavDocumentWrapper.listWebdavDocumentWrapper.detail 视图。

hr manager role

切换至 Entities tab。

赋予 WebdavDocumentWrapper 实体的所有权限。

hr manager role 2

行级角色 WebDavDocumentsDepartmentRole

这里我们要添加一个行级角色,限制员工对于 WebDAV 文档的访问。

如果员工具有 HR ManagerAdministrator 角色,则显示全部 WebDAV 文档。

如果员工具有 Employee 角色,则仅显示其部门的文档。

Jmix 工具窗口中,点击 Newadd)→ Row-level Role。在对话框中输入:

  • Role nameWebDav documents department

  • Role codeweb-dav-documents-department

  • Classcom.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

在对话框中输入:

  • EntityWebdavDocumentWrapper

  • Where clause{E}.department = :current_user_department

add jpql policy 2

点击 OK

分配角色

现在我们为用户分配角色。

启动应用程序并打开 Users 列表视图。选择用户 alice 并点击 Role assignments 按钮:

role assign 1

Role assignments 视图中,点击 Resource roles 面板的 Add 按钮。

在对话框中,选择 WebDAV: minimal access 角色,点击 Select

WebDAV: minimal access 角色是所有需要使用 WebDAV 功能用户的必需角色。赋予 WebDAV 相关实体的的基本权限。

用户 alice 应具有下列资源和行级角色:

role assign 2

为用户 bob 添加 WebDAV: minimal access 资源角色。

点击 Row-level roles 面板的 Add 按钮。

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 文档。此类用户只能使用 Download 按钮下载 Web DAV 文档,不能创建或删除文档。

可以通过访问 Knowledge base 视图验证权限。

view by bob

可以看到,用户无法使用 CreateRemove 按钮。

总结

在本节中,我们修改了“HR 经理”和“员工”角色,以便限制不同用户组对应用程序的访问权限。

我们了解到:

  • 一个 资源角色 可以授予用户访问视图和与特定实体交互的能力。

  • 一个 行级角色 用于限制用户读取特定数据行。

  • 在运行时使用 User.detail 视图中提供的 Role assignment 视图为用户分配角色。

  • 所有需要使用 WebDAV 功能的用户都需要 WebDAV: minimal access 角色。