系统权限设计-不同的用户有不同的故事
本文是这段时间工作中,与系统权限设计相关的经验总结,以学习为主,没有涉及系统过于复杂的情况,属于日常够用程度,希望有用。
只要做B端,终有一天会遇到权限系统的设计,虽然之前一直都是开发随意发挥。但是近期有项目重构,不得不硬着头皮去学习了一下相关知识,发现好像并么有之前想象的那么复杂,此处做个简单的整理。

为节约大家时间,简单目录:
· 为什么要有权限管理?
· 什么是权限?
· 什么是角色?角色和权限有什么关系?
· 什么是数据权限?
· 如何设计?
-------------------------------- 没图片的手动分割线 --------------------------------
常见的方案是ACL(Access Control List)权限访问列表和RBAC(Role-Based Access Control)基于角色的访问控制。现在绝大多数是第二种,第一种除非你这个系统真的很、非常、超级简单的时候才会用到。(当然还有更加复杂的模型,但是通常用不到,不做详细阐述。)
为什么要有权限管理?
简单来说,就是不同的人能看到的、能操作的东西不一样(咱作为一个小设计,总不能去看财务能看到的信息叭,去批个报销单什么的,多不好)。
复杂些说,那就是:
·业务复杂:不同的人干不同的事
·信息敏感:A不能随意看B的内容
·操作安全:A不能随意处理B的流程
·页面简化:我想专心工作,与我无关的信息藏起来好吗?

什么是权限?
权限系统的基本构成:用户、角色、权限。
用户:登录系统的唯一身份识别,平台的使用者。
角色:相当于一个权限的集合,打个包,批量的为账号进行权限分配。B端系统常见的几种角色:超级管理员、平台运营管理员、数据管理员等。
权限:就是你可以看啥、干啥。
其中,权限又分为页面权限(又称菜单权限/查询权限)、操作权限、数据权限。
页面权限(菜单权限/查询权限):就是你能不能看到这个页面,访问的权限;
操作权限:是指具体到按钮,如新增、删除、编辑等等能不能操作的权限;
数据权限:用户可以看到哪些数据/内容的权限。(大概就是我们中心不能看你们中心的数据,下属不能看到领导的数据,但是领导可以看到你的~这种感觉)
-------------------------------- 没图片的手动分割线 --------------------------------
什么是角色?角色和权限有什么关系?
一般用户不会直接配置权限(多指页面权限和操作权限),而是把权限与角色打包好,然后直接给用户分配角色,然后就有相应的权限啦,超方便管理。
一般情况一个用户对应一个角色就够用了,一个角色可以分配给多个用户。但是一个用户也是可以对应多个角色的(主要由系统业务决定的),那就是多对多,这时候他拥有的权限是角色权限的并集。(某用户同时拥有AB两个角色,角色A有a1、a2的权限,角色B有a1、b1的权限,那他就是拥有a1、a2、b1的权限)

什么是数据权限?
那有人要问了,为什么有些人明明是一样的角色,但是看到的数据不一样呢?那就是数据权限的问题了。
一般情况下,数据权限跟这个人的组织有关。
这个地方的组织,一般有两种概念:
· 行政组织:也就是公司的组织架构。——根据用户的组织架构,控制数据的显示。
· 临时组织:手动创建,添加组织成员。——比如办公协同,数据共享的时候,其他人可申请查看/编辑权限。
如何设计?
在学习过程中,有个有趣的方案吸引了我的注意。这个方案的优势是,管理角色的时候,即时查看和编辑相应的权限,操作更加方便。在用户管理的界面,通过下拉快速编辑用户角色也是一大亮点。个人很喜欢这个方案,仅供大家参考。如果有更好的方案,欢迎分享~


以上就是这段时间学习到的关于系统权限设计相关的知识,整理出来,以做总结。赶在三月底前完成了今年的1/4的flag。
写在最后,当初怎么也没想到,好多东西居然是在“xx都是产品经理”上了解的,惊呆。























