©️产品思维模型 ·用产品思维,理解世界
阅读本文大概需要9分钟。
大家好,见字如面,我是穆宁。
今天,应群友要求,给大家系统讲解下权限管理功能的设计思路。也是为没有做过权限管理功能模块或即将要做的同学,做一下系统扫盲。
还是那句话,做产品有个基本设定:
定位确定需求,需求确定功能。
所以权限管理功能从某种意义上必然是满足了某类需求的,我们就从需求说起,聊一聊管理后台。
权限管理模块的需求目标包括如下三点:
(1)对应用系统的所有资源进行权限控制,比如应用系统的功能菜单、各个界面的按钮控件等进行权限的操控;
(2)完善用户、角色、组织、资源、操作的管理功能,其中的组织管理模块只提供组织视图,不参与权限的控制管理。
(3)开发人员开发新的系统功能地图场景,通过资源和角色模块进行操作管理。使用系统管理员身份登陆,直接将访问路径作对角色资源授权给操作,实现资源访问控制管理。
所以从需求范围层面来看,权限可以分为三种:页面权限,操作权限,数据权限。
页面权限控制你可以看到哪个页面,看不到哪个页面,又称为菜单权限控制。很多系统都只做到了控制页面这一层级,它实现起来比较简单,并且与操作权限有一定的关联性,所以在此我们将它与操作权限归并。(页面权限可以理解为操作权限的最底层权限:浏览)
操作权限则控制你可以在页面上操作哪些按妞。当我们进入一个页面,我们的目的无非是在这个页面上进行增删改查,那在页面上对应的操作可能是:查询,删除,编辑,新增四个按钮)可能你在某个页面上,只能查询数据,而不能修改数据。
数据权限则是控制你可以查阅、管理、导出哪些数据,比如A部门的人只能看到或者修改A创建的数据,他看不到或者不能修改B部门的数据。
好,说完权限管理的范围,我们接下来考虑,怎么样对操作权限与数据权限进行管理。这里我们引入一个成熟概念,叫做RBAC模型。
RABC(Role-Based Access Control),基于角色得访问控制。通俗说,就是,权限不会直接分配到用户,而是分配到用户所拥有得角色。
这样的好处是什么?好处就是如果用户全体特别大,分配权限就能累死人,基于RBAC更适合企业应用得权限控制。
RBAC得四大模型RBAC根据这套模型功能的复杂程度不同,由简单到复杂又可以分为RBAC-0、RBAC-1、RBAC-2、RBAC-3四个层级。
RBAC-0:
RBAC-0是最基础的,就是在用户与角色、角色与权限间建立关系,每种关系均为多对多。
RBAC-1:
RBAC-1是在RBAC-0的基础上,增加了继承关系。就是一个角色只能有另一角色的部分权限,这个角色的权限大小受另一角色权限影响。简单说,角色2由角色1派生,那么角色2所有得权限必然小于角色1,角色1拥有权限1,2,而角色2只有拥有权限1。
RBAC-2:
RBAC-2模型,其实就是角色冲突,一个简单例子,你不能即是运动员也是裁判员,这样关系就乱了。这里就是用户3,不能同时拥有角色2,3。
RBAC-3:
RBAC-3是RBAC-1与RBAC-2的结合,可以理解为1+2。就是既有继承关系,又有限制条件,基础都一样。
好,说完RBAC模型,我们进入到下一环节。如何利用RBAC模型用户 角色 权限设计,对操作权限、数据权限进行管理呢?
(1)数据权限管理
数据权限是指用户是否能够看到某些数据。主要应用在数据有保密要求,或数据量大,需按用户或角色来进行区分时。例如:财务主管在后台可以看到公司所有人的工资流水,但普通员工只能看到自己的工资流水。
在这里,会有人或许认为,既然我们的权限是跟角色关联,为什么“查看工资流水”这个权限精确到每个用户了呢?其实这就是RBAC-2的一种,权限与角色关联后增加了限制条件,不过这种限制条件无法在页面上灵活配置。数据权限的颗粒度由粗到细可以分为菜单级、栏目级、字段级,一般配置页面都可以灵活操作。
(2)操作权限管理
操作权限是指用户是否能够操作对应按钮。需要先有数据权限,才有操作权限,所以需要增加系统自动校验:选择了操作权限,就默认勾选了查看(数据)权限;取消了数据权限,就自动取消了操作权限;以上就是我们做单系统的权限设计分享的内容。在多系统的权限设计中,虽然理论基础一样,但因为涉及到多个系统,所以产生了很多其他问题,需要另外解决。
所以在此我们可以做个总结,RBAC1其实是角色分级模型。角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构。
RBAC2是角色限制模型。规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。责任分离包括静态责任分离和动态责任分离。约束与用户-角色-权限关系一起决定了RBAC2模型中用户的访问许可
RBAC3是统一模型。对角色+角色分级+角色限制进行三重限定,是一个类似于交集的概念。
好3D交通工具,接下来我们讨论如果实际设计一个系统的权限管理功能,我们需要设计哪些子功能?
权限管理
每个用户组的管理员都有添加用户,授予用户权限的能力。
权限的意思就是对某个资源的某个操作用户 角色 权限设计,现在规定:所谓资源,即系统的模块;所谓操作,包括:增加、删除、修改、查询等操作。
权限管理系统的总体功能分为:授权与认证。授权,指将权限授予角色或用户。如果用户A拥有角色B、角色C,那么,缺省的情况下,用户A将拥有被分配给角色A和角色C的所有权限。如果用户拥有多个角色,那么用户的权限是这些角色权限的合集。
总体上,可分为模块管理、角色管理,用户组管理和用户管理模块:
模块管理:
因为模块是一个树状结构(本系统只支持两级模块的结构),我们可以点击其中一个模块以便打开其子模块来维护;
角色管理:
可以添加角色信息、删除角色信息以及给角色授权。在这个界面上,按照两级模块的形式列出系统所有模块,以及在这些模块上面的CRUD(添加、读取、更新、删除)权限;所谓“启用”,意思是本设置有效,否则设置无效。
用户组管理:
与角色管理流程基本相似,只不过,用户组所具有的权限是其用户组下的用户基本的权限,而角色所具有的权限是其用户组下的用户附加的权限。
用户管理:
因为用户实际上就是系统人员的帐号,而且每个人只能拥有一个帐号,所以用户管理主界面,实际上就是系统所有人员的列表!
【分配帐号】 - 给人员分配帐号,如果已经有帐号,则提示无法继续分配帐号,如果想修改帐号的话,需要先删除帐号,再重新分配
【删除帐号】- 提示是否删除,如果确定,再发出删除请求,在删除成功之后,刷新界面。
【分配角色】- 给用户分配角色,一个用户可以拥有多个角色;
好了,今天我们的系统扫盲就到这里,如果觉得对你有帮助,欢迎。相关权限管理系统案例及思维导图,可在公众号中按照如下操作领取。
我是穆宁,你的产品知识系统扫盲小帮手,快来关注我,我们明天见!