跳到主要内容

**RBAC** vs. **RBAC96**

Casbin RBAC 与 RBAC96​

本页将 Casbin 的 RBAC 与 RBAC96 模型进行比较。Casbin 支持 RBAC96 的主要理念,并增加了域(domains)和灵活的权限机制。

RBAC96Casbin 支持情况备注
RBAC0✅ 完全支持用户、角色、权限及其关系。
RBAC1✅ FullRole 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.