RBAC权限模型定义
RBAC(Role-Based Access Control)权限模型的概念,即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。
传统的RBAC权限模型
用户—角色—权限多对多的关系。
- 权限修改只需对角色的关联权限进行修改。
- 若多身份,只需多用户进行多角色赋予即可。
- 权限通过角色来赋予至用户,使得用户即使发生变更、离职也不会影响权限本身的稳定性。
经典的W型RBAC权限模型
基于RBAC权限模型的SaaS系统用户权限:
SaaS系统多租户需求分析
后台代码实现rbac权限管理,常见多租户需求分析
具体SaaS系统用户权限4要素
用户 – 角色 – 权限 – 资源。
资源
被安全管理的对象(Resources页面、菜单、按钮、订单等)
权限
访问和操作资源的许可(Permit删除、编辑、审批等)
角色
- 通过业务流程,确定一个角色,实际是确定角色,并角色具备的那些权限的过程。角色之所以是权限的集合,是众多权限颗粒组成;
- 通过把权限给这个角色,再把角色给用户,从而实现用户的权限,因此它承担了一个桥梁的作用。
- 引入角色这个概念,可以帮助我们灵活的扩展,使一个用户可以具备多种角色。
用户
系统实际的操作员(User)
SaaS系统多租户表结构分析
从上面的gif动图,可以看出“权限”比较重要!
权限管理
权限管理从功能操作(页面+功能)、数据管理两个不同颗粒度等级来考量的。
权限的抽取可以是开发层面,随着项目的迭代,同时进行权限的控制,也可以做成后台进行统一管理
权限构建
权限颗粒
- 功能菜单权限
粗力度权限控制,获得当前权限后页面所有数据可查看或操作
- 功能操作权限
比菜单权限更细化,具象到不同角色,即使看到相同数据,所具备的操作管理权限也不一样
- 数据字段权限
最细颗粒的权限控制,实现了不同角色进入后,看到的数据字段都会不同。
RBAC权限模型总结
RBAC权限模型优点
- 基于角色的访问控制基本原理,是在用户和访问权限之间,加入角色这一层,实现用户和权限的分离。
- 用户只有通过激活角色才能获得访问权限。
- 通过角色对权限分组,大大简化了用户权限分配表,间接地实现了对用户的分组,提高了权限的分配效率。
- 加入角色层后,访问控制机制,更接近真实世界中的职业分配,便于权限管理。
在RBAC模型中,角色是系统根据管理中,相对稳定的职权和责任来划分,每种角色可以完成一定的职能。
用户通过饰演不同的角色,获得角色所拥有的权限,一旦某个用户成为某角色的成员,则此用户可以完成该角色所具有的职能。通过将权限指定给角色,而不是用户,在权限分派上提供了极大的灵活性和极细的权限指定粒度。也同时支持三个著名的安全原则:最小权限原则;责任分离原则;数据抽象原则。
一言以蔽之--对生活场景的抽象
【用户(user:谁)】被赋予【角色(role:具有1-n个权限)】,通过角色关联的【权限(permit:许可)】去访问/操作【资源(resource)】
场景:小张(user)是人事主管(role),可以看到小莉的请假申请(resource),并批复同意(permit)