6.2.3. 权限许可

permission - 权限许可 定义用户对系统对象或功能的权限,例如 UI 界面,实体操作等。在讨论权限许可时,这些对象称为 target - 客体

通过给用户分配角色为用户赋予权限。

在通过角色为用户赋予特定的权限之前,用户对客体无任何权限。因此,无角色的用户没有任何权限,不能通过通用 UI 或 REST API 访问系统。

根据客体的不同,有以下类型的权限许可:

许可类型描述如下:

界面权限

界面可以被允许或者拒绝。

在构建主菜单和使用 Screens 接口的 create() 方法创建界面时,框架都会检查界面权限。如需在代码中检查界面权限,可以使用 Security 接口的 isScreenPermitted() 方法。

实体操作权限

对每个实体,可以设置以下权限:Create、Read、Update、Delete.

参阅 数据访问检查 章节了解框架中的不同机制如何使用实体操作权限。如需在代码中检查实体操作权限,可以使用 Security 接口的 isEntityOpPermitted() 方法。

实体属性权限

每个实体的每个属性都可以被赋予查看或者修改的权限。

参阅 数据访问检查 章节了解框架中不同机制如何使用实体属性权限。在应用程序中检查实体属性许可时,可以使用 Security 接口的 isEntityAttrPermitted() 方法。

特定功能权限

这些是任意功能的权限许可配置。项目中特定的权限是在 permissions.xml 配置文件中设置。

检查特定功能权限的示例:

  1. @Inject
  2. private Security security;
  3. public void calculateBalance() {
  4. if (!security.isSpecificPermitted("myapp.calculateBalance"))
  5. return;
  6. //...
  7. }

界面组件权限

界面组件权限可以用来隐藏或者将界面中的特定 UI 组件设为只读状态,不论这些组件是否绑定了实体。界面组件权限会在框架发送 AfterInitEventBeforeShowEvent 消息之间生效。

界面组件权限与其他类型权限不同的地方在于,只限制其指定的客体的权限。也就是说除非为组件客体定义了隐藏/只读权限,否则该组件客户对于用户来说没有任何限制。

客体组件按照下列规则通过其路径指定:

  • 如果该组件属于界面,只需要简单的指定其组件标识符。

  • 如果该组件属于界面内使用的界面片段,则指定为 “界面片段标识符.组件标识符” 的格式。

  • 如需为标签页面板标签页或者表单字段配置,则指定为 “组件标识符[标签页或字段标识符]” 的格式。

  • 如需配置界面操作权限,则指定为 “组件标识符<操作标识符>” 的格式,比如:customersTable<changeGrade>