RBAC 与 RBAC96 对比
Casbin RBAC 与 RBAC96
本页将 Casbin 的 RBAC 与 RBAC96 模型进行对比。Casbin 支持 RBAC96 的主要思想,并增加了域(domains)和灵活的权限。
| RBAC96 | Casbin 支持情况 | 说明 |
|---|---|---|
| RBAC0 | ✅ 完全支持 | 用户、角色、权限及其关系。 |
| RBAC1 | ✅ 完全支持 | 角色层级(例如 alice→role1→role2)。 |
| RBAC2 | ⚠️ 部分支持 | 通过 policy effect 实现约束式处理(例如 deny-override)。不支持数量限制。 |
| RBAC3 | ⚠️ 部分支持 | RBAC1 + RBAC2;约束同上,不支持数量限制。 |
与 RBAC96 的区别
1. 用户与角色
Casbin 在类型系统中不区分"用户"和"角色"——两者都是字符串。因此:
p, admin, book, read
p, alice, book, read
g, amber, admin
GetAllSubjects() 返回 policy 中作为 subject 出现的所有用户和角色([admin alice])。GetAllRoles() 只返回 g 规则的右侧([admin])。因此 Casbin 是从用法中推断这一区别的;若要严格区分,请使用命名约定(例如 user::alice、role::admin)。
2. 权限
RBAC96 固定了七种权限类型。而在 Casbin 中,权限可以是任意字符串(例如 read、write、approve),你可以按自己的应用来定义。
3. 域(Domains)
Casbin 支持 RBAC with domains,因此角色和权限可以按租户或域划分作用范围——这超出了标准 RBAC96 模型。