**RBAC** vs. **RBAC96**
Casbin RBAC 与 RBAC96
本页将 Casbin 的 RBAC 与 RBAC96 模型进行比较。Casbin 支持 RBAC96 的主要理念,并增加了域(domains)和灵活的权限机制。
| RBAC96 | Casbin 支持情况 | 备注 |
|---|---|---|
| RBAC0 | ✅ 完全支持 | 用户、角色、权限及其关系。 |
| RBAC1 | ✅ Full | Role hierarchy (e.g. alice→role1→role2). |
| RBAC2 | ⚠️ 部分支持 | 通过 policy effect 实现约束式处理(例如 deny-override)。不支持量化限制。 |
| RBAC3 | ⚠️ 部分支持 | RBAC1 + RBAC2;约束如上所述,不支持量化限制。 |
与 RBAC96 的差异
1. 用户 vs. 角色
Casbin 在类型系统中不区分“用户”和“角色”——两者都是字符串。因此:
p, admin, book, read
p, alice, book, read
g, amber, admin
GetAllSubjects() 返回策略中作为主体出现的所有用户和角色(如 [admin alice])。GetAllRoles() 仅返回 g 规则的右侧内容(如 [admin])。因此 Casbin 通过用法推断这种区别;若要严格分离,请使用命名约定(例如 user::alice, role::admin)。
2. 权限
RBAC96 固定了七种权限类型。在 Casbin 中,权限是任意字符串(例如 read, write, approve),因此您可以匹配自己的应用需求。
3. 域(Domains)
Casbin 支持 带域的 RBAC,因此角色和权限可以按租户或域进行范围限定——这超出了标准 RBAC96 模型的范畴。
Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.