跳转到主要内容

RBAC 与 RBAC96 对比

Casbin RBAC 与 RBAC96​

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

RBAC96Casbin 支持情况说明
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 模型。