SaaS后台经验分享:如何设计权限管理
权限管理的作用
SaaS后台系统中,数据具有敏感性,由于工作职责不同,所以用户拥有的权限也不同。因此,系统需要给用户分配权限,使得用户在规定范围内使用系统。
RBAC模型介绍
本文介绍的RBAC模型是一个模型族,它包含了RBAC0~RBAC3四个概念性模型。
- 基本模型RBAC0定义了完全支持RBAC概念的任何系统的最低需求。RBAC1和RBAC2两者都包含RBAC0,但各自都增加了独立的特点,它们被称为高级模型。
- RBAC1中增加了角色分级的概念,一个角色可以从另一个角色继承许可权。
- RBAC2中增加了一些限制,强调在RBAC的不同组件中在配置方面的一些限制。
- RBAC3称为统一模型,它包含了RBAC1和RBAC2,利用传递性,也把RBAC0包括在内。这些模型构成了RBAC模型族。
本文主要介绍RBAC0模型,虽然是最基础、最核心的权限模型,但只要学习理解了其中的思想,便可以设计RBAC1~3的模型了;
RABC0的设计
RBAC(Role-Based Access Control )意为基于角色的访问控制,角色是权限集合,通过给用户分配权限达到控制访问的目的。
RBAC0示意图
RBAC认为权限的过程可以抽象概括为:判断【Who是否可以对What进行How的访问操作(Operator)】这个逻辑表达式的值是否为True的求解过程。
即将权限问题转换为Who、What、How的问题,因此我们需要定义的是角色、资源和行为。
比如我们需要考虑:
- 系统有哪些用户,可以分为哪些角色;
- 系统有哪些功能(资源)需要按权限来划分;
- 功能(资源)的拆分粒度,到页面还是到具体按钮操作;
- 新用户的默认角色和权限;
- 用户与角色是“多对一”还是“多对多”;
- 新增的功能是默认全部角色“可用”还是“不可用”;
- ......
这些都是比较细节的问题,我们在设计功能时需要考虑。
下面主要说一下Who,What,How的定义。
1.定义角色(Who)
前期需要进行用户访谈,了解不同岗位的用户的工作职责,并抽象出几个角色。
然后,用户与角色之间的关系需要明确是“多对一”还是“多对多”。这个问题需要结合业务场景进行讨论,如果用户的工作职责界限分明、不同工作岗位都有专门员工,那么此时可以设计成“多对一”,即用户只有一个角色,一个角色可以对应多个用户;
用户与角色“多对一”
如果某些用户的工作内容跨越几个职能,则可以设计成“多对多”,即一个用户可拥有多个角色,一个角色也可对应多个用户。
用户与角色“多对多”
这里还需注意的是,为了系统的灵活性,角色的权限应是可编辑的,管理员可以创建角色,并对角色的权限进行修改以应对工作场景的变化。
2.定义资源(What)
资源包括功能和数据。
定义功能时需要明确,功能权限到页面级别还是操作级别。在一些权限严格的业务场景,比如电商ERP中,则会要求定义到操作级别,比如销售报表导出按钮,计算毛利率按钮等;如果权限比较宽松的,则可能只到页面级别,比如该角色是否能访问订单列表等等。这些都需要根据业务需求决定。
定义数据时则比较简单,可以根据该角色绑定的店铺或区域来限制用户的数据权限,比如美国运营专员只绑定美国区的,则只能获取美国区的数据。
3.定义行为(How)
行为包括增删查改。不同的角色可根据需要设置不同的操作权限,比如对于同样的成绩管理页面,学生只能查看成绩,不能修改成绩;但教师同时拥有修改成绩和查看成绩的功能。