后台产品系列1-权限管理系统的分析与设计
绝大部分的后台,都需要有一套权限管理机制,几乎每个产品经理都会碰到权限问题,或简单或复杂,或粗略或精细,而每个产品的权限管理都是相通的,所以进行一个系统性的分析很有必要,可以一劳永逸。
为什么要进行权限管理:
数据保密:如一个公司的财务数据/订单分析,只能有少数人才有权利知道,普通员工不能看到
数据安全:避免由于人员操作问题,导致的数据误删/误改状态等;防止非法人员通过程序接口,篡改/删除他人数据等
业务隔离:现实工作中,每个人职位不同,所能进行的业务不同,比如员工请假,只有领导才有权限审批
权限管理的类型:
从管理的内容上可以分为两类:
1.功能级权限管理:可操作的菜单、页面、按钮等,本文主要介绍功能级权限管理
2.数据级权限管理:可查看的数据、字段等 权限管理可以简单的理解为:Who是否可以对What进行How操作Who:可以是用户,角色,部门等 What:可以是页面,按钮,字段等 How:可以是增/删/改/查/导出等
权限管理的2种模型:
1.ACL(Access Control List,访问控制列表) ACL是最早也是最基本的一种访问控制机制,它的原理非常简单:每一项资源,都配有一个列表,这个列表记录的就是哪些用户可以对这项资源执行CRUD(增删改查)中的那些操作。当系统试图访问这项资源时,会首先检查这个列表中是否有关于当前用户的访问权限,从而确定当前用户可否执行相应的操作。
总得来说,ACL是一种面向资源的访问控制模型,它的机制是围绕“资源”展开的。 由于ACL的简单性,使得它几乎不需要任何基础设施就可以完成访问控制。但同时它的缺点也是很明显的,由于需要维护大量的访问权限列表,ACL在性能上有明显的缺陷。另外,对于拥有大量用户与众多资源的应用,管理访问控制列表本身就变成非常繁重的工作。
2.RBAC(Role-Based Access Control,基于角色的访问控制) RBAC是把用户按角色进行归类,通过用户的角色来确定用户能否针对某项资源进行某项操作。RBAC相对于ACL最大的优势就是它简化了用户与权限的管理,通过对用户进行分类,使得角色与权限关联起来,而用户与权限变成了间接关联。RBAC模型使得访问控制,特别是对用户的授权管理变得非常简单和易于维护,因此有广泛的应用。
但是它也有自身的缺点,那就是由于权限是以角色为载体分配的,如果某一角色下的个别用户需要进行特别的权限定制,如同加入一些其他角色的小部分权限或去除当前角色的一些权限时,RBAC就无能为力了,因为RBAC对权限的分配是角色为单位的。
权限管理的产品设计:
1.固定权限类型-最简权限系统 对于一些小公司的网站,没有必要进行复杂的权限控制,后台的使用者类型也比较少,我们可以简单的对管理员类型进行分类,如超级管理员/普通管理员,超级管理员拥有所有权限,可以分配管理员账号,而普通管理员只可以进行一些业务操作。 如一个学院的精品课程网站,后台使用者一般也就老师和助教,老师为超级管理员,可以分配管理员账号;助教为普通管理员,拥有上传课程资料等权限。在管理员登录后根据账号类型展示不同的菜单,并在各个操作页面进行权限判断,没有必要进行过于复杂的权限设计。
2.基于用户的权限系统 针对第一种权限系统,我们可以看到,优缺点都很明显,优点:简单,开发起来不费力;缺点:权限的分配不灵活,每类管理员的权限是固定的。因此考虑对每个管理员进行权限配置。
添加管理员页面改为下图,在添加管理员时,选择拥有的权限(权限的分配可到菜单级,如需细化,后面再谈),数据库设计大致如下:
管理员表Admin:ID、手机号、密码、邮箱、最后登录时间、创建时间
权限表(菜单)Module:ID、菜单英文名称、汉语名称、父菜单ID、排序值、指向URL
管理员-权限表AdminModule:管理员ID、权限ID,多对多关系
3.基于角色的权限系统
上述权限系统解决了固定权限不灵活的问题,但是当用户较多时,如果权限发生变化,需要对每一个用户进行权限更改, 显然会增加工作量,考虑引入角色的概念。
每个用户拥有多个角色,每个角色属于多个用户;(也可每个用户对应1个角色,视具体业务而定) 每个角色拥有多个权限,每个权限属于多个角色; 相同业务职责的用户,分配相同的角色,当权限变更时,只需更改一次相应角色对应的权限即可。 数据库设计共涉及5张表:用户表、角色表、权限表、用户-角色表、角色-权限表。
4.基于用户+角色的权限系统
基于角色的权限系统,解决了多个用户权限变更时操作麻烦的问题,但是也有局限性,权限是以角色为最小单元的,而实际上,公司有一些人,总会有一些额外的权限,这时可以考虑采取用户+角色的权限系统。 每个用户的权限=所属角色的权限+个人的权限。
以淘宝卖家子账号为例,每个岗位(类似角色概念)拥有不同的权限,每个员工属于不同的岗位,继承相应权限,同时也可对员工个人权限进行设置。这里逻辑非常复杂,需要记录那些权限是继承角色的,那些是自定义的,角色权限变化及自定义权限变化时对权限的影响。
总结:权限管理是一项非常复杂的工作,可根据实际的业务来选择合适的权限系统,而非追求完美的权限管理。
点赞(1)