6.2.3. 权限许可

permission -权限许可 定义用户对系统对象或功能的权限,例如界面,实体操作等。可以定义允许的权限,也可以定义 prohibition - 拒绝 的权限。

默认情况下,用户对对象拥有允许的权限,除非显式的定义了拒绝权限。

权限许可通过 sec$Permission 实体实例控制,包含以下属性:

  • type – 许可类型,许可施加的对象类型。

  • target – 许可对象,许可施加的对象。该属性的格式基于许可类型。

  • value – 许可值,可选值基于许可类型。

许可类型描述如下:

  • PermissionType.SCREEN – 界面许可

    界面标识在 target 属性中指定,value 属性值可以为 0(拒绝) 或 1(允许)。

    界面许可检查发生在组建系统主菜单,和每次调用 Frame 接口的 openWindow(), openEditor(), openLookup() 方法时。

    在应用程序中检查界面许可时,可以使用 Security 接口的 isScreenPermitted() 方法。

  • PermissionType.ENTITY_OP – 实体操作许可

    target 属性中指定 实体名 + “:” + 操作类型,操作类型有: create, read, update, delete。例如:library$Book:deletevalue 属性值可以为 0(拒绝)或 1(允许)。

    实体操作许可检查发生在使用 DataManager,数据感知可视化组件,和标准行为操作数据时,也适用于实体列表。所以,操作权限也会影响 client blocks 和 REST API 。但是在 Middleware 通过 EntityManager 操作数据时不会触发实体操作许可检查。

    在应用程序中检查实体操作许可时,可以使用 Security 接口的 isEntityOpPermitted() 方法。

  • PermissionType.ENTITY_ATTR – 实体属性许可

    target 属性中指定 实体名 + “:” + 属性名,例如:library$Book:namevalue 属性值可以为 0(不可见), 1(只读) 或 2(读写)。

    实体属性许可只在数据感知可视化组件REST API 中检查。

    在应用程序中检查实体属性许可时,可以使用 Security 接口的 isEntityAttrPermitted() 方法。

  • PermissionType.SPECIFIC – 特定功能许可。特定的许可可以用来取代角色对项目功能的许可/禁止,因为角色是许可的合集。

    target 属性中指定功能标识,value 属性值可以为 0(拒绝)或 1(允许)。

    项目中特点的许可在配置文件 permissions.xml 中设置。

    例如:

    @Inject
    private Security security;
    
    private void calculateBalance() {
        if (!security.isSpecificPermitted("myapp.calculateBalance"))
            return;
        ...
    }
  • PermissionType.UI – 界面组件许可

    target 属性中指定 界面标识 + “:" + 组件路径。组件路径格式描述详见下一章节。

检查许可的时候,不要直接使用 UserSession 的方法,建议使用 Security 接口中同样名字的方法,Security 接口也支持可能发生的实体扩展