肖新宇,微医云服务团队前端工程师。喜欢游泳?♀️,健身。
大家在平时使用网页的时候,遇到和权限相关的场景应该很多,比如视频网站的会员视频,管理后台的访问控制,那么,本文将带大家了解一下,权限系统的通用设计模型理念,和如何设计一个简易的权限系统。
思考时间到了,我们来说下为什么需要权限系统?。
大家可以看看我们平时使用的各种系统,不同的身份的人,在同一个场景下面所需要的功能是不一样的,比如我们的挂号网,患者登录进去需要看到的是挂号流程,医生登录进去需要的是看到待接诊的患者。这时就需要涉及到角色权限功能的分配。
接下来给大家介绍 RBAC 模型和权限系统的设计
RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。
在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
如下图:
有的人可能会问,为什么需要使用角色来进行关联呢,之前权限绑定在用户上面不就好了。为啥还需要添加角色这个概念。
其实在简单的系统里面,每个用户只存在一种角色,那么可以直接用户绑定权限。但是对于比较大的系统,很多用户拥有相同的一批权限,这时,我们如果不引入角色的关联,那么每次都需要批量修改全部的用户权限。而且角色关联,很方便的可以针对于多用户多角色的场景。
RBAC 模型可以分为:RBAC0、RBAC1、RBAC2、RBAC3 四种。其中 RBAC0 是基础,也是最简单的,相当于底层逻辑,RBAC1、RBAC2、RBAC3 都是以 RBAC0 为基础的升级。
一般情况下,使用 RBAC0 模型就可以满足常规的权限管理系统设计了。
最简单的用户、角色、权限模型。这里面又包含了 2 种:
相对于 RBAC0 模型,增加了子角色,引入了继承概念,即子角色可以继承父角色的所有权限。
RBAC3,也就是最全面级的权限管理,被称为统一模型,它包含了 RBAC1 和 RBAC2,利用传递性,也把 RBAC0 包括在内,综合了 RBAC0、RBAC1 和 RBAC2 的所有特点 , 它是基于 RBAC0 的基础上,将 RBAC1 和 RBAC2 进行整合了,最全面,也最复杂的.
这种模式既要维护好角色间的继承关系处理好分层,又要处理角色间的责任分离。
上面我们已经介绍了权限系统的设计模型,那么又到了我们的思考环节,怎么利用 RBAC 去设计一个权限系统。
通过我们前面对 RBAC 的介绍,RBAC 模型:用户-角色-权限。所以最基本的我们应该具备用户、角色、权限这三个内容。
回顾前文,角色作为枢纽,关联用户、权限。所以在 RBAC 模型下,我们应该:创建一个角色,并为这个角色赋予相应权限,最后将角色赋予用户。将这个问题抽象为流程,如下图
然后我们把上图映射到我们的系统里面
当医生登录时,只看得到医生门诊, 护士登录只看得到预约登记,他们都看不到其他用户的专属的页面,但是医院管理员可以看到全部的。
这样就实现了用户、权限、角色的关联,一个简易的权限系统就完成了。
本篇文章主要是工作中开发权限系统的总结,通过给大家介绍 RBAC 的模型和概念,让大家了解到 RBAC 的核心是通过角色管理权限,角色赋予用户来进行权限管理,让大家在设计权限系统设计时可以进行参考。