赞
踩
工作时遇到了需要设计一套权限系统,所以做了一些调研。目前业界比较通用的权限系统设计都是采用RBAC模型,那么我们详细理解下RBAC模型的概念以及一些实际使用中建议的使用规范:
首先了解下RBAC权限模型的基本概念和几种模型分类。
RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限,增加权限设置的扩展性。
为什么要有角色的概念:对于批量的用户权限调整,只需调整用户关联的角色权限,无需对每一个用户都进行权限调整,既大幅提升权限调整的效率,又降低了漏调权限的概率
RBAC模型可以分为:RBAC0、RBAC1、RBAC2、RBAC3 四种,其中RBAC0是基础,也是最简单的,相当于底层逻辑,RBAC1、RBAC2、RBAC3都是以RBAC0为基础的升级
最简单的用户、角色、权限模型。这里面又包含了2种:
当前我们使用的场景一般都是:用户和角色是多对多关系的,简单多对一关系场景覆盖不全
使用场景:在某个公司,一个人可能既是人事HR,又是招聘负责人
相对于RBAC0模型,增加了子角色,引入了继承概念,即子角色可以继承父角色的所有权限,但是子角色必须是在父角色的基础上减少权限点
使用场景:如某个业务部门,有经理、主管、专员。主管的权限不能大于经理,专员的权限不能大于主管,如果采用RBAC0模型做权限系统,极可能出现分配权限失误,最终出现主管拥有经理都没有的权限的情况。而RBAC1模型就很好解决了这个问题,创建完经理角色并配置好权限后,主管角色的权限继承经理角色的权限,并且支持在经理权限上删减主管权限。
基于RBAC0模型,增加了对角色的一些限制:角色互斥、基数约束、先决条件角色等。
各类角色特性关系图如下:
称为统一模型,它包含了RBAC1和RBAC2,利用传递性,也把RBAC0包括在内,综合了RBAC0、RBAC1和RBAC2的所有特点
所以一个权限系统需要具备如下的几个关键要素:
全局权限点主要是当做角色属性来使用的,配置后,不需要为每个角色再配一遍,例如系统的首页查看权限,不是特别敏感,该项目下的用户列表都有权限查看
我们平时使用的权限其实是有分类的,大体上分为三类:页面权限、操作权限、数据权限。
使用的时候,页面权限和操作权限通过配置成相应的权限点实现,数据权限通过配置约束并附着在操作权限上生效。
使用时需要有一些基本规范和建议,总体而言一个权限系统要设计的简单易用为妙,也不要被业务场景赶着跑,最好有全局意识:
总而言之,操作的落点是权限点,约束是权限点更细粒度的数据范围控制,而角色是和用户进行绑定的,简单用,搞复杂了会增加代码复杂度和理解难度
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。