目录
RBAC(Role-Based Access Control )
核心RBAC0:这是权限管理的核心部分,其他的版本都是建立在0的基础上的。
RBAC1,基于RBAC0模型,进行了角色的分层,也就是说角色上有了上下级的区别,存在了继承包含关系,
RBAC2,也是基于RBAC0模型的基础上,进行了角色的访问控制。主要引入了SSD(静态职责分离)和DSD(动态职责分离)
RBAC3,也就是最全面级的权限管理,它是基于RBAC0的基础上,将RBAC1和RBAC2进行整合了,最前面,也最复杂的:
RBAC(Role-Based Access Control )
基于角色的访问控制。
RBAC认为授权实际就是who,what,how三者之间的关系,即who对what进行how的操作。Who,权限的拥用者或主体(如Principal、User、Group、Role、Actor等等);what,权限针对的对象或资源(Resource、Class) ;How,具体的权限(Privilege,正向授权与负向授权)。
RBAC的级别:
-
核心RBAC0:这是权限管理的核心部分,其他的版本都是建立在0的基础上的。
- 主要有四部分组成:
- 用户(User)
- 角色(Role)
- 许可(Permission)
- 会话(Session)
- 用户和角色是多对多的关系,表示一个用户在不同的场景下可以拥有不同的角色,将用户和许可进行分离,是彼此相互独立,使权限的授权认证更加灵活。
- 角色和许可(权限)是多对多的关系,表示角色可以拥有多分权利,同一个权利可以授给多个角色
- 在项目中开发中我们正是使用这种最简单,但是却最通用的权限模型。这里想提一下我们建数据库表,我们用了五张表来实现这个权限模型,将其中的两个多对多分解成了两对多对一来完成,这样更有利于我们维护表,感觉也更加简单,更容易控制。用五张表来进行权限方面的管理了,在用户表中保存用户,角色表中保存角色级别,许可表中保存各种权限信息,然后通过中间表,来维护彼此之间的关系。这样就完成了权限的管理了。
- 主要有四部分组成:
-
RBAC1,基于RBAC0模型,进行了角色的分层,也就是说角色上有了上下级的区别,存在了继承包含关系,
- 也就是前边说过的适合于用树展现的哪种自关联的结构,这种模型合适于角色之间的层次明确,包含明确。但是认为用第一种模型也是可以的,只不过第一种可能会有数据冗余,没有这种更加面向对象化而已。
-
RBAC2,也是基于RBAC0模型的基础上,进行了角色的访问控制。主要引入了SSD(静态职责分离)和DSD(动态职责分离)
- SSD主要应用在用户和角色之间(授权阶段),主要约束:
- 互斥角色,同一个用户不能授予互斥关系的角色
- 基数约束,一个用户拥有的角色是有限的,一个角色拥有的许可是有限的
- 先决条件约束,用户想要得到高级权利,必须先拥有低级权利
- DSD会话和角色之间的约束,主要动态决定怎么样计划角色
- RBAC2中的一个基本限制时互斥角色的限制,互斥角色是指各自权限互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。常举的例子:在审计活动中,一个角色不能同时被指派给会计角色和审计员角色;
- 是指角色的权利权利是有限的,用户有用的角色也是有限的,当然分配用户时也是有限的,不能进行无限制的分配用户,例如公司的领导人有限的;c,是指要想获得较高的权限,要首先拥有低一级的权限。就像我们生活中,国家主席是从副主席中选举的一样。
- SSD主要应用在用户和角色之间(授权阶段),主要约束:
-
RBAC3,也就是最全面级的权限管理,它是基于RBAC0的基础上,将RBAC1和RBAC2进行整合了,最前面,也最复杂的:
- RBAC3=RBAC1+RBAC2
- 用户组,当平台用户的基数增大,角色类型越来越多时,而且一部分人具有相同的属性
综上为权限管理模型的相关介绍,其实在任何系统中都会涉及到权限管理的模块,无论复杂简单,我们都可以通过以RBAC模型为基础,进行相关灵活运用来解决我们的问题。
常用权限框架:
- Spring Security
- Apache Shiro
- Sa-Token
- 自研