组合角色

多个角色可以基于以下规则组合创建角色层次结构:

  • 资源角色只能与其他资源角色组合。

  • 行级角色只能与其他行级角色组合。

  • 如果某个角色被分配给用户,则其所有父角色也会生效。

角色可以在设计时组合 — 通过编写代码或使用 角色设计器。在运行时,可以通过安全视图管理角色层次结构。

设计时组合资源角色

代码中的角色组合类似于一个接口扩展另一个接口。例如,资源角色 SystemOwner 可以从多个限制性更强的角色获取策略,然后添加自己的附加策略来获得更多的访问权限。

@ResourceRole(name = "SystemOwner", code = SystemOwnerRole.CODE)
public interface SystemOwnerRole extends BasicEmployeeRole, ManagerRole, SupervisorRole {
    String CODE = "system-owner";

    // System owner's policies go here

}

使用 Studio 的 角色设计器 支持可视化组合角色,能实时看到组合后的策略结果。

resource role designer

运行时组合资源角色

运行时,可以通过 Security → Resource roles 视图组合资源角色。创建或选择一个资源角色进行编辑,然后可以添加一个或多个 Base roles(基础角色)

combined runtime resource role

最终的权限集是角色自身的权限加上所选基础角色授予的所有权限。

基础角色只能添加在运行时创建的角色中。

设计时组合行级角色

行级角色的组合也是通过接口扩展的方式完成。例如,SameRegionRole 组合了几个角色,这些角色可以让用户仅能看到自己区域的数据。

@RowLevelRole(name = "Can see data of their region", code = SameRegionRole.CODE)
public interface SameRegionRole extends SameRegionCustomersRole, SameRegionRowsRole {
    String CODE = "same-region-role";
}

运行时组合行级角色

运行时,可以通过 Security → Row-level roles 视图组合行级角色。创建或选择一个行级角色进行编辑,然后可以添加一个或多个 Base roles(基础角色)

combined runtime row level role

最终的权限集是角色自身的权限加上所选基础角色授予的所有权限。

基础角色只能添加在运行时创建的角色中。