B端产品之权限设计(RBAC权限模型)
编辑导语:在B端管理系统中,“权限管理”是必不可少的功能,不同的系统中权限的应用复杂程度不一样,要根据实际产品以及需求而设置合理的权限。本文作者通过介绍RBAC权限模型的概念,结合实际案例,对B端产品的权限设计进行了分析,一起来看一下吧。
随着互联网的快速发展,B端行业也逐渐崛起,很多企业管理中使用的软件我们通常称其为B端管理系统,而在B端系统中“权限管理”是必不可少的功能,不同的系统中权限的应用复杂程度不一样,都是根据实际产品以及需求情况而设置合理的权限。
而我们现在对于权限的设置基本上都是建立在RBAC权限模型上的、扩展的,下面我会通过介绍RBAC权限模型的概念,以及结合实际业务情况列举权限设置的应用。
一、什么是RBAC权限模型?
RBAC是Role-BasedAccess Control的英文缩写,意思是基于角色的访问控制。RBAC认为权限授权实际上是Who、What、How的问题。在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What进行How的操作,也就是“主体”对“客体”的操作。其中who是权限的拥有者或主体(例如:User、Role),what是资源或对象(Resource、Class)。
简单的理解其理念就是将“角色”这个概念赋予用户,在系统中用户与权限之间通过角色进行关联,以这样的方法来实现灵活配置。
RBAC其实是一种分析模型,主要分为:基本模型RBAC0、角色分层模型RBAC1、角色限制模型RBAC2和统一模型RBAC3。
RBAC权限模型是基于角色的权限控制。模型中有几个关键的术语:
- 用户:系统接口及访问的操作者
- 权限:能够访问某接口或者做某操作的授权资格
- 角色:具有一类相同操作权限的用户的总称
1. RBAC0
RBAC0是RBAC权限模型的核心思想,RBAC1、RBAC2、RBAC3都是在RBAC0上进行扩展的。RBAC0是由四部分构成:用户、角色、会话、许可。
用户和角色的含义很简单,通过字面意思即可明白,会话:指用户被赋予角色的过程,称之为会话或者是说激活角色;许可:就是角色拥有的权限(操作和和被控制的对象),简单的说就是用户可使用的功能或者可查看的数据。
用户与角色是多对多的关系,用户与会话是一对一的关系,会话与角色是一对多的关系,角色与许可是多对多的关系。
2. RBAC1
RBAC1是在RBAC0权限模型的基础上,在角色中加入了继承的概念,添加了继承的概念后,角色就有了上下级或者等级关系。
举例:集团权责清单下包含的角色有:系统管理员、总部权责管理员、区域权责管理员、普通用户,当管理方式向下兼容时,就可以采用RBAC1的继承关系来实现权限的设置。上层角色拥有下层的所有角色的权限,且上层角色可拥有额外的权限
3. RBAC2
RBAC2是在RBAC0权限模型的基础上,在用户和角色以及会话和角色之间分别加入了约束的概念(职责分离),职责分离指的是同一个人不能拥有两种特定的权限(例如财务部的纳入和支出,或者运动员和裁判员等等)。
用户和角色的约束有以下几种形式:
- 互斥角色:同一个用户在两个互斥角色中只能选择一个(也会存在一个用户拥有多个角色情况,但是需要通过切换用户角色来实现对不同业务操作)
- 基数约束:一个用户拥有的角色是有限的,一个角色拥有的许可也是有限的
- 先决条件约束:用户想要获得高级角色,首先必须拥有低级角色
会话和角色之间的约束,可以动态的约束用户拥有的角色,例如一个用户可以拥有两个角色,但是运行时只能激活一个角色。
例如:iconfont和蓝湖的用户与角色就采用了约束的概念,超级管理员只允许只有一个
4. RBAC3
RBAC3是RBAC1与RBAC2的合集,所以RBAC3包含继承和约束。
二、为什么要引用RBAC权限模型?
RBAC中具有角色的概念,如果没有角色这个概念,那么在系统中,每个用户都需要单独设置权限,而系统中所涉及到的功能权限和数据权限都非常多,每个用户都单独设置权限对于维护权限的管理员来说无疑是一件繁琐且工作量巨大的任务。
而引入角色这个概念后,我们只需要给系统设置不同的角色,给角色赋予权限,再将用户与角色关联,这样用户所关联的角色就直接拥有了该角色下的所有权限。
例如:用户1~用户8分别拥有以下权限,不同用户具有相同权限的我用不同的颜色做了区分,如下图:
在没有引入RBAC权限模型的情况下,用户与权限的关系图可采用下图的杨叔叔展示,每个用户分别设置对应的权限,即便是具有相同权限的用户也需要多次设置权限。
引入RBAC权限模型及引入了角色的概念,根据上面表格的统计,用户1、用户3、用户5、用户8拥有的权限相同,用户2、用户6、用户7拥有相同的权限,用户4是独立的权限,所以我们这里可以根据数据统计,以及实际的需求情况,可以建立三个不同的角色,角色A、角色B、角色C,三个角色分别对应三组用户不同的权限,如下图所示:
对应的上面的案例表格我们就可以调整为含有角色列的数据表,这样便可以清楚的知道每个用户所对应的角色及权限。
通过引用RBAC权限模型后,对于系统中大量的用户的权限设置可以更好的建立管理,角色的引入让具有相同权限的用户可以统一关联到相同的的角色中,这样只需要在系统中设置一次角色的权限,后续的用户便可以直接关联这些角色。
这样就省去了重复设置权限的过程,对于大型平台的应用上,用户的数量成千上万,这样就可避免在设置权限这项工作上浪费大量的时间。
三、引入用户组的概念
我们依旧拿上面表格案例举例,虽然前面我们应用的RBAC权限模型的概念,但是对于大量用户拥有相同权限的用户,我们同样的也需要对每个用户设置对应的角色,如果一个部门上万人,那么我们就需要给这个部门上万人分别设置角色。
而这上万其实是具有相同的权限的,如果直接采用基础的RBAC权限模型的话,那么面对这样的情况,无疑也是具有一个庞大的重复的工作量,并且也不利于后期用户变更的维护管理,那么针对相同用户具有相同的权限的情况,我们便可以引入用户组的概念。
什么是用户组呢?用户组:把具有相同角色的用户进行分类。
上面我们的数据表格案例中的用户1、用户3、用户5、用户8具有相同的角色A,用户2、用户6、用户7也拥有相同的角色B,那么我们就可以将这些具有相同角色的用户建立用户组的关系,拿上面的案例,我们分别对相同角色的用户建立组关系,如下:
- 用户1、用户3、用户5、用户8→建立用户组1
- 用户2、用户6、用户7→建立用户组2
因为用户4只有一个用户,所以直接还是单独建立用户与角色的关系,不需要建立用户组,当然尽管只有一个用户也是可以建立用户组的关系,这样有利于后期其他用户与用于4具有相同的角色时,就可以直接将其他用户添加到这个用户组下即可,根据业务的实际情况而选择适合的方案即可。
通过案例表格的变化我们就可以直观的看出权限设置变得清晰简洁了,通过对用户组赋予角色,可以减少大量的重复的工作,我们常见的企业组织、部门下经常会出现不同用户具有相同角色的情况,所以采用用户组的方式,便可以很好地解决这个问题。
给具有相同权限的用户建立用户组,将用户组关联到对应的角色下,此用户组就拥有了此角色下的所有权限,而用户是属于用户组的,所以用户组下的所有用户也就同样的拥有了此角色下的所有权限。一个用户可以属于多个用户组,一个用户组也可以包括多个用户,所以用户与用户组是多对多的关系。
四、引入权限组的概念
权限组与用户组的原理差不多,是将一些相对固定的功能或者权限建立组的关系,然后再给此权限组赋予角色,目前我所接触的B端项目中使用权限组的概念的比较少,可简单地看一下关系图:
五、功能权限和数据权限
B端系统中一般产品的权限由页面、操作和数据构成。页面与操作相互关联,必须拥有页面权限,才能分配该页面下对应的操作权限,数据可被增删改查。所以将权限管理分为功能权限管理和数据权限管理。
- 功能权限管理:指的是用户可看到那些模块,能操作那些按钮,因为企业中的用户拥有不同的角色,拥有的职责也是不同的。
- 数据权限管理:指的是用户可看到哪些模块的哪些数据。
例如:一个系统中包含多个权责清单(清单1、清单2、清单3),系统管理员能对整个系统操作维护,也就可以对系统中的所有清单都能操作(增、删、改、查);假如分配给总部权责管理员的是清单1,那么他将只能对清单1进行操作(增、改、查);普通用户也许只有查看数据的权限,没有数据操作的权限(查),这里的操作是系统中所有可点击的按钮权限操作,列举的增删改查只是最常见的几种操作而已。
六、实战案例总结
我目前所做的项目是一个关于权责管理平台的B端系统,关于系统中的权限需求我这里简单的介绍一下,并采用上面所总结的RBAC权限模型对实际业务需求进行设计分析:
- 不同的区域管理员的权限各不相同(说明会存在不同的用户具有不同的权限,那么我们就可以采用角色对其进行规范)
- 有大量的用户具有相同的权限(例如组织、部门等)(说明存在相同权限的用户,那么我们就可以采用用户组的概念)
- 上级管理员拥有下级人员的所有权限(说明存在继承关系)
- 不同用户所看到的数据和能编辑的数据不同,一些机密性的数据只允许部分人员看或者编辑(说明存在约束)
- 会存在临时性的用户(说明需要支持新建新角色)
- 同一用户会存在多个角色(多角色求合集或者切换用户角色)
简单说明一下,我所做这个项目的人员管理是在另外一个系统中管理的,权责平台只是调用另外一个平台的组织结构树即可,所以权限设置模块没有做人员管理的模块。
根据上面对需求的分析,整个权限管理模块中我们需要建立用户组管理模块、功能角色管理模块、业务(数据)管理模块、权限设置模块,下面就对每个模块做更细致的页面展示设计分析。
1. 用户组管理模块
用户组管理主要是对具有相同权限的用户分类建组,所以页面中我们需要有新建用户组的功能,每个用户组下我们需要关联对应的组织、部门、岗位、人员,让这些具有相同权限的用户在同一个用户组下,如下图:
2. 功能角色管理模块
B端项目中一般会建立几个默认的角色是不支持用户修改、删除的,例如最常见的系统管理员,而也会需要有其它角色的需求,所以此模块需要支持用户新建角色,功能角色是对大模块的页面和操作的权限设置,操作权限的颗粒度可以细分到每个页面的每一个按钮的操作,如下图:
3. 业务(数据)角色管理模块
业务角色是对页面中的数据查看的权限设置,而对于系统中的普通用户查看系统的权限是常用不变的,所以我们考虑默认有一个普通用户的角色,其它业务角色用户根据实际需求情况自行建立即可。
由于我们权责系统的特殊性,我们需要满足用户对部分数据可编辑且对部分数据的字段可编辑,按照常理来说,编辑的操作行为是属于功能权限的设置,但是这里的操作行为是建立在数据的基础之上的,所以如果把这里对数据的操作权限在功能角色模块中设置,就会显得混乱。
所以我们直接在业务角色模块中加入对数据的可编辑权限,这里在设置的时候更方便灵活。
4. 权限设置模块
权限设置模块只需要设置权限分配的对象,选择对应的用户或者用户组,关联对应的功能角色和业务(数据)角色即可,这样就形成了一条完整的闭环的权限设置。
对于06同一用户会存在多个角色,我们系统是采用切换角色的模式来实现的,因为不同角色中存在互斥的情况,以及所涉及的领域不同,操作权限差距较大,求合集不利于控制权限,所以只能采用切换的模式实现。
七、总结
权限设置是B端项目必不可少的模块,也是令设计师头疼的一件事,但是只要理清楚实际的业务需求,合理运用RBAC权限设置的原理,其实也没那么难,关于权限设置的分享就到这来了,希望对处于B端设计的小伙伴有所帮助,也欢迎大家和我一起讨论关于设计的有趣事情哦!
本文由 @设计小余 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于 CC0 协议
本文由 @设计小余 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于 CC0 协议
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。
管理员属于业务角色中普通用户的范畴吗? 还是说在业务角色中,不是按照权限管理角色来区分的,而是可选择特定的人群进行业务数据权限的分配?
这个文章中权限管理的管理员是属于业务角色中普通的用户,只是通过权限管理辣区分角色的,这是常见的权限管理模式。但是在三员管理中,管理员就不属于业务角色中普通的用户,是特定的人群进行角色分配管理的,三员管理的功能文章中没有做总结
没必要划分用户组,角色就够了。用角色定义用户对所有实例的功能权限、组织权限、数据权限(分列表、页面、字段),再复杂的还有分享数据的权限管理,包括系统管理员角色对组织、用户、角色的管理。权限约束用角色+组织就可以实现。用户量大,总部管理员可授权各级组织的管理员来处理。
另外,通过岗位调整自动授权的方式,在多级销售组织中很容易出错的,比如部门下的小组,在HR行政组织中是没有的。要区分行政组织、业务组织、财务组织、虚拟组织的。
权限设置确实是有简单的也有比较复杂的,不过都需要根据产品具体需求和应用场景去选择适合的方案,我这里也是根据自己在工作中所接触的真实项目而分享的一种权限设置方案哈,大家合理参考
有点没看明白,既然角色跟用户组是1V1的关系,为啥还有用户组的概念;
新进的单个数据,可以之间配角色,批量导入的数据直接在导入表中加入角色的字段不是可以实现用户组的概念么…我还是没想明白,期望有大佬可解答,这个用户组到底能解决啥场景跟问题
+1,理解下来其实角色就是用户组,1角色对应同一批组织
角色是系统中设置的功能角色或者业务数据角色(功能角色例如:系统管理员、区域管理员、浏览者等等,是对系统中功能做权限管理的,业务数据角色是对系统中业务数据设置的角色,是针对系统中数据做管理的,例如一个权责清单,清单中包含数万条数据,不同用户维护的数据量不同,例如系统管理员可以维护和查看全量数据,而区域管理员只能维护和查看属于自己区域的数据。)
用户组:是对具有相同权限的用户创建组的概念,例如:某区域的多个普通员工具有相同的数据和功能权限,这样就可以直接将这些普通员工创建用户组,一次性设置所有员工的功能角色和业务数据角色)方便维护
在实际业务中同样都是部门主任,他们同一角色,但是职能是不一样的,就需要划分a单位主任组,b单位主任组,来分配角色,方便管理,当然 也可以直接将这批人分成x角色,但是维护时候这个角色下有几百人,哪些人是一起的一个单位的,都不清楚,比较麻烦。说白了就是把这个角色下的用户加了个标签分类。
看具体业务需求,ERP 系统权限,比这复杂多了,,所以没有标准,多余说法,,多去实践,跨行业竞品学习,,
您举个例子我们学习下
确实真实的业务场景是非常复杂的,也有在同一张表中,部分数据具有查阅权限,部分数据具有编辑权限,还有一部分数据具有新增和、编辑、删除的权限,虽然在同一张表格中,数据也有不同的权限
是的,具体场景,具体设计,不是大而全,搞死人的。
学多人直觉性点对点不过脑反问,真的需要沉浸式业务学习,体系化了解,
一个角色足矣,没有必要拆成功能角色和业务角色,用户组也是多余
对于简单的业务一个角色确实可以,但是针对复杂的业务需求场景还是有必要拆分
一般情况下需要用户组吗?目前已遇到这个问题
还是需要清楚你的真实业务需求再选择是否需要用户组,如果多人具有相同功能角色和业务角色,那么可以考虑用户组
用户组的概念还是有点多余
系统用户几千人,不同单位,同一岗位角色,这种操作起来如果不分组,那一个角色下面就会出现不同单位的几百个人,维护起来费事
我觉得产品设计过于复杂了
实际业务场景需要,当然常见的简单权限设置也不需要这样考虑用户组、功能和数据权限分离的情况
为啥功能角色和业务角色不能整合一起呢?出现有A页面权限却无A页面数据权限如何处理?依据组织隔离数据的场景如何满足?
具有A页面的的权限,一般也是针对该页面的部分数据做权限管理吧,如果单独开放该页面的功能权限,却不开放该页面的数据权限,就会出现空页的状态,一般不会这样分配设置权限的,实际业务也比较少见
组织隔离数据就会用到用户组的概念呀
业务角色,和功能角色的差异如何理解
业务角色也称数据角色,是对系统中数据做权限管理,功能角色是对系统中操作功能(增、删、改等)的权限