RBAC权限控制模型
一、首先在介绍RBAC权限控制模型前,先聊聊一些基本的问题
1、Why?为什么要进行权限控制
如果没有权限控制,系统的功能完全不设防,全部暴露在所有用户面前。用户登录以后可以使用系统中的所有功能。这是实际运行中不能接受的。 所以权限控制系统的目标就是管理用户行为,保护系统功能。
2、What?什么是权限控制
“权限”=“权力”+“限制”
3、How?如何进行权限控制
①定义资源
②创建权限
③创建角色
④管理用户
⑤建立关联关系
二、RBAC 权限模型
1、概念
权限控制的核心是用户通过角色与权限进行关联,所以前面描述的权限控制系统可以提炼为一个模型:RBAC(Role-Based Access Control,基于角色的访问控制)。 在RBAC模型中,一个用户可以对应多个角色,一个角色拥有多个权限,权限具体 定义用户可以做哪些事情。
2、RBAC0~RBAC3
2.1、RBAC0
最基本的 RBAC 模型,RBAC 模型的核心部分,后面三种升级版 RBAC 模型也都是建立在 RBAC0 的基础上。
2.2、RBAC1
在 RBAC0 的基础上增加了角色之间的继承关系。角色 A 继承角色 B 之后将具 备 B 的权限再增加自己独有的其他权限。比如:付费会员角色继承普通会员角色, 那么付费会员除了普通会员的权限外还具备浏览付费内容的权限。
2.3、RBAC2
在 RBAC0 的基础上进一步增加了角色责任分离关系。责任分离关系包含静态 责任分离和动态责任分离两部分。
-
静态责任分离:给用户分配角色时生效
-
互斥角色:权限上相互制约的两个或多个角色就是互斥角色。用户只能被分配到一组互斥角色中的一个角色。
例如:一个用户不能既有会计师角色又有审计师角色。
-
基数约束:
- 一个角色对应的访问权限数量应该是受限的
- 一个角色中用户的数量应该是受限的
- 一个用户拥有的角色数量应该是受限的
-
先决条件角色:用户想拥有 A 角色就必须先拥有 B 角色,从而保证用户拥有 X 权限的前提是拥有 Y 权限。
例如:“金牌会员”角色只能授予拥有“银牌会员”角色的用户,不能直接授予普通用户。
-
-
动态责任分离:用户登录系统时生效
- 一个用户身兼数职,在特定场景下激活特定角色
- 马云在阿里巴巴内部激活创始人角色
- 马云在某企业级论坛上激活演讲嘉宾角色
- 一个用户身兼数职,在特定场景下激活特定角色
2.4、RBAC3
RBAC3 是在 RBAC0 的基础上同时添加 RBAC2 和 RBAC3 的约束,最全面、最复杂。