Zum Hauptinhalt springen

RBAC vs. RBAC96

Casbin RBAC und RBAC96​

This page compares Casbin’s RBAC with the RBAC96 model. Casbin supports the main RBAC96 ideas and adds domains and flexible permissions.

RBAC96Casbin supportNotes
RBAC0✅ FullUsers, roles, permissions and their relationships.
RBAC1✅ FullRole hierarchy (e.g. alice→role1→role2).
RBAC2⚠️ PartialConstraint-style handling (e.g. deny-override) via policy effect. No quantitative limits.
RBAC3⚠️ PartialRBAC1 + RBAC2; constraints as above, no quantitative limits.

Differences from RBAC96​

1. User vs. role​

Casbin does not separate “user” and “role” in the type system—both are strings. So:

p, admin, book, read
p, alice, book, read
g, amber, admin

GetAllSubjects() returns both users and roles that appear as subjects in policy ([admin alice]). GetAllRoles() returns only the right-hand side of g rules ([admin]). So Casbin infers the distinction from usage; for strict separation use a naming convention (e.g. user::alice, role::admin).

2. Permissions​

RBAC96 fixes seven permission types. In Casbin, permissions are arbitrary strings (e.g. read, write, approve), so you can match your app.

3. Domains​

Casbin supports RBAC with domains, so roles and permissions can be scoped per tenant or domain—beyond the standard RBAC96 model.

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.