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:delete
。value
属性值可以为 0(拒绝)或 1(允许)。
实体操作许可检查发生在使用 DataManager,数据感知可视化组件,和标准行为操作数据时,也适用于实体列表。所以,操作权限也会影响 client blocks 和 REST API。但是在 Middleware 通过 EntityManager 操作数据时不会触发实体操作许可检查。
在应用程序中检查实体操作许可时,可以使用 Security 接口的 isEntityOpPermitted()
方法。
PermissionType.ENTITY_ATTR
– 实体属性许可
在 target
属性中指定 实体名 + “:” + 属性名,例如:library$Book:name
。value
属性值可以为 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 接口也支持可能发生的实体扩展。 |