角色模型
CabloyJS的角色体系基于网上流行的RBAC模型
,同时做了以下增强:
-
树形结构
:将角色扩展为树形结构
,并将部门、岗位、职位
的概念也整合到角色树中,从而便于实现更灵活的数据授权 -
更广的应用范围
:角色体系可以应用到更多的资源授权。菜单
仅仅是其中一种资源 -
数据范围授权
:支持企业级业务开发中数据范围授权
的问题。比如,Mike
是软件部的员工,只能查看自己的数据;Jone
是软件部经理,可以查看本部门的数据;Jimmy
是企业负责人,可以查看整个企业的数据
概念辨析
涉及到角色体系,往往会有这些概念:用户
、用户组
、角色
、部门
、岗位
、授权对象
等等
而CabloyJS设计的角色体系只有用户
、角色
、授权对象
等概念,概念精简,层次清晰,灵活高效,既便于理解,又便于维护
部门即角色
部门
从本质上来说,其实就是角色,如:软件部
、财务部
等等
岗位即角色
岗位
从本质上来说,其实也就是角色,如:软件部经理
、软件部设计岗
、软件部开发岗
等等
数据范围即角色
数据范围
也是角色。如:Jone
是软件部经理,可以查看软件部
的数据。其中,软件部
就是数据范围
角色树
CabloyJS针对各类业务开发的需求,提炼了一套内置角色
,并形成一个规范的角色树
。实际开发中,可通过对角色树
的扩充和调整,实现各类角色相关的需求
- root
- anonymous
- authenticated
- template
- system
- registered
- activated
- superuser
- organization
- internal
- external
- template
名称 | 说明 |
---|---|
root | 角色根节点,包含所有角色 |
anonymous | 匿名 角色,凡是没有登录的用户自动归入匿名 角色 |
authenticated | 认证 角色 |
template | 模版 角色,可为模版角色配置一些基础的、通用的权限 |
system | 系统模版 角色 |
registered | 已注册 角色 |
activated | 已激活 角色 |
superuser | 超级用户 角色,如用户root 属于超级用户 角色 |
organization | 组织 角色 |
internal | 内部组织 角色,如可添加软件部 、财务部 等子角色 |
external | 外部组织 角色,可为合作伙伴提供角色资源 |
角色
superuser
聚合了角色system
。所以,对于一些基础的权限,我们往往是给角色system
授权;这样,角色superuser
也就拥有了相应的授权;进而,用户root
也就拥有了这些授权
术语规范
角色
是面向业务系统开发最核心的功能之一,CabloyJS提供了既简洁又灵活的角色体系
,为便于交流与开发,CabloyJS对其中用到的术语规范如下:
目录角色
-
目录角色:凡是可以包含子角色的角色,如
authenticated
、organization
、软件部
-
目录角色不允许添加
用户
叶角色
-
叶角色:
角色树
的最末端,如superuser
、软件部设计岗
-
只有叶角色才允许添加
用户
子角色
- 子角色:既可以是
目录角色
,也可以是叶角色
聚合角色
-
聚合角色不是一种角色名称,而是体现了角色之间的一种关系。一般情况下,
角色树
体现的是纵向的
从上至下的继承关系
,还可以让一种角色横向的
聚合另一种角色 -
通过
聚合角色
机制,很容易实现类似角色模版
的功能
数据范围
- 特指在进行
原子授权
时,权限所限定的角色范围
角色结构重建
为了提升运行性能,CabloyJS对角色树
进行了优化处理。所以,如果角色树
结构发生了变动,就需要执行角色结构重建
,以便对角色树
重新优化
- 在新版CabloyJS中,如果角色树结构发生了变动,会自动进行重建
相关API
1. 查询角色树状态
- 1const dirty = await this.ctx.bean.role.getDirty();
2. 使用代码重建
- 1await this.ctx.bean.role.build();
评论: