权限管理是后台管理系统重要的一部分。主要是针对不同的角色对整个后台管理系统进行权限控制。
一个账号可以对应多个角色,每个角色对应不同的权限,其实这种就是RBAC模型。通过不同的角色进行权限的灵活配置。
什么是RBAC?
我们先简单介绍下什么是RBAC
RBAC(Role-Based Access Control 基于角色的访问控制)一个用户拥有若干角色,每个角色拥有若干权限。在这种模型中,用户与角色之间,角色与权限之间,权限与资源之间都是多对多的关系。

用户和角色是多对一关系:一个用户只充当一种角色,一种角色可以有多个用户担当;
用户和角色是多对多关系:一个用户可同时充当好几种角色,一种角色可以有多个用户担当;

从上图中我们可以看到图一是每个人只能拥有一个角色,但是一个角色可以包含多个用户,比如张三和李四都是产品经理,但是张三只能是产品经理的角色,不能在充当测试的角色。
图二是多对多的关系,一个用户可以拥有多个角色,一个角色也可以分配给多个用户,比如张三既是产品经理也负责测试,具备测试的权限。
那么时候使用多对一权限体系,什么时候使用多对多权限体系呢?
多对多相比多对一肯定更灵活,一般都是推荐使用多对多的情况。多对一的情况适用于系统比较单一,人员比较较少,不需要太复杂的权限控制体系,不会出现一个人身兼多职的情况。
权限体系
权限可以分为两大类:功能权限和数据权限,功能权限包括页面权限和操作权限,每种权限都有不可读/可读/可编辑三种状态。
页面权限
页面权限就是控制你能看到哪些页面,哪些页面看不到,这是最基本的一个权限控制功能,很多系统也只做到了这一步。页面权限实现起来比较简单,但是控制比较粗糙,只能针对页面进行控制,不够精细。在这个的基础上有了操作权限控制。
操作权限
操作权限就是可以控制页面上具体的操作按钮,举个简单的例子当我们进入一个页面,可能只具备增删改查的全部权限,那么对应的按钮就有:查询、编辑、添加、删除等。管理员进行了操作权限控制,我们进入页面可能只具有查询的权限,不能进行修改数据。
数据权限
数据权限就是你能看到哪些数据,哪些数据是看不到的。比如查询订单的时候,华东的运营只能看到华东区的订单数据,看不到华北、华南等地区的订单权限。
角色管理
角色就是按照职位来命名决定的,以禅道为例:一个项目下有项目经理、产品经理、研发主管、研发、测试人员等。根据不用的角色来配置不同的平台权限。
这时候你可能会问:为什么不根据用户来配置不同的权限?
系统设计一般不根据用户来单独配置功能权限。如果后期要添加新的功能,直接根据不同的用户对应的不同角色进行授权即可。比如研发人员,我们直接给研发人员的角色授权新的权限。如果是根据用户来授权,我们需要找到不同的用户进行一一授权,显然是不合理的。

用户管理
新入职一个员工,一般会自动为其分配账号,用户账号包括用户的基本信息(用户名,姓名、手机、职务、手机号、邮箱等),可以通过手机短信或者邮箱来进行激活,并且给员工赋予一个角色,也就是相当于分配了权限,当然也是支持一个用户有多种角色的情况。员工离职后,账号自动作废和删除。
小结:
在设计一个权限系统时首先要理清原理,权限控制,控制的本质是什么?
其实就是用户,行为,以及行为之间的的关联关系。用户与用户之间是否有层级关系,树形结构?
以及关联关系是一对多还是多对多,是否有父级关系,是继承关系还是独立存在等等。
这些都是要根据工作中的实际情况进行分析设计。用于前期需求梳理会有一定的帮助。
需求就是不断剖析和找到问题的本质。





