1、RBAC
RBAC(Role-Based Access Control)是基于角色的访问控制,用户绑定角色,角色关联功能,用户只有权访问自己角色所关联的功能。

RBAC 模型结构简单(User → Role → Permission),但缺点是:
- 不支持用户直接拥有权限;
- 不好表达“上下级授权”、“项目内的权限委托”;
- 权限变化需要变更角色绑定,流程不灵活。
2、ABAC
ABAC基于属性的访问控制(Attribute-Based Access Control,简称 ABAC),它的原理是通过属性组合动态判断一个操作是否可以被允许。
考虑ABAC的模型时,我们需要一个更加复杂的场景:OA系统中的文档系统(下面例子灵感来源于Authing官网)。
- 授权员工张三有《xxx公告》的编辑权限;
- 当《xxx公告》的所属部门跟李四的部门相同时,李四可以访问这个文档;
- 当王五是《xxx公告》的拥有者并且《xxx公告》的状态是草稿时,王五可以编辑这个文档;
- 早上九点前禁止 A 部门的人访问《xxx公告》;
- 在除了上海以外的地方禁止以管理员身份访问 A 系统。
从上面这个例子中,我们可以看到ABAC模型与RBAC模型的区别:RBAC是静态的,用户具备的权限只与关联角色相关,不随自身特征变化而改变;ABAC是动态的,时移世易,随着用户特征值的变化,权限也随之变化。如果将角色看做一种特征值,那RBAC就是一维的ABAC。

在 ABAC 模型中,一个操作是否被允许是基于对象、资源、操作和环境信息共同动态计算决定的:
- 对象是当前请求访问资源的用户,用户的属性包括ID、员工性质(正式、实习、外包等)、员工类型(普通、销售、一线等)、岗位角色、所在部门、办公地点、组织成员身份等;
- 资源是当前用户要访问的资产或对象,例如文件、数据、服务器、API等;
- 操作是用户试图对资源进行的操作,常见的操作包括查询、编辑(新增、修改)、复制、删除、导出等;
- 环境是每个访问请求的上下文,环境属性包含访问的时间、位置,对象的设备,通信协议和加密强度等。
在 ABAC模型 的决策语句的执行过程中,决策引擎会根据定义好的决策语句,结合对象、资源、操作、环境等因素动态计算出决策结果。每当发生访问请求时,ABAC模型决策系统都会分析属性值是否与已建立的策略匹配。如果有匹配的策略,访问请求就会被通过。
3、RBAC与ABAC对比
3.1 实现方式
RBAC实现方式相对较简单,主要需要考虑以下几个方面:
- 角色定义:定义不同的角色,根据不同的职责和权限进行划分。
- 角色分配:将用户分配到相应的角色中。
- 权限分配:将不同的权限分配给不同的角色,以实现权限控制。
ABAC的实现过程相对复杂,需要考虑以下几个方面:
- 属性设计:设计适当的属性标识用户、资源、环境等。
- 访问策略:基于属性来制定访问策略。
- 实现机制:引入多个组件来实现属性访问控制,如规则引擎等。
3.2 适用场景
RBAC:
适用于规模较小、角色划分较为静态的场景,比如一些中小型企业、少量管理员对应着少量功能的系统等,它的优点在于结构清晰,易于管理。但是如果角色不够细分,就不能对不同的用户进行详细的权限控制,也不太适用于复杂多层次的业务场景。
ABAC:
适用于复杂多层次、动态变化的场景,它的优点在于非常灵活,可以应对不同的用户、不同的业务需求,更加符合实际场景的需求。但是ABAC需要对各种属性进行建模,实现更加复杂,需要的技术支持和投入也更大。
4、支持用户授权用户(Delegated Authorization)
这个就更细了,比如:
- A用户是管理员,可以把权限 P1 授权给B;
- B拥有 P1 但不能授权他人(除非被赋予授权权限)。
如何实现:
- 数据库中记录“权限来源”:
user_id | permission_code | source_type | source_id B edit_user delegated A - 控制是否允许“传递性授权”(防止无限传递);
- UI上展示权限来源,便于追踪。
5、总结
最后说下技术实现建议:
- 权限中心:统一控制权限逻辑,不分散在业务代码中;
- 接口级鉴权:网关/服务端统一判断用户是否有权限;
- 前端权限:菜单级、按钮级、字段级等用权限码控制;
- 使用 DSL(领域特定语言)或权限表达式系统:让非开发人员也能配置权限逻辑。
权限系统常见是基于RBAC实现,但在用户权限需要动态变化、以及用户授权用户的场景下,单纯RBAC就不够用了。我更倾向使用“RBAC + ABAC + 授权链”的混合模型。
- 静态角色用RBAC管理;
- 用户动态权限通过直接赋权(User → Permission)或ABAC属性判断控制;
- 授权链场景下可以记录权限来源,支持传递性控制。
这样系统既有灵活性,也可追踪权限变更来源,适合复杂中后台系统。

1646

被折叠的 条评论
为什么被折叠?



