Skip to content
Start with Identity
Fundamentals · Intermediate

RBAC vs ABAC vs ReBAC: Which Access Control Model to Use

By SWI Community Team · Updated 2026-11-05 · 10 min

RBAC vs ABAC vs ReBAC: RBAC grants access through roles, ABAC evaluates attributes of the user, resource and context, and ReBAC derives access from relationships between objects. Use RBAC when permissions fit a short list of job functions, ABAC when access depends on data already on the request, and ReBAC when access follows ownership, membership or hierarchy. Most production systems blend them: roles for the coarse grant, attributes or relationships for the fine-grained condition.

Once a user is authenticated, authorization decides what they can do, and this is where the most severe application vulnerabilities live. Broken Access Control is A01 in the OWASP Top 10:2025, as it was in the 2021 edition, so choose the model deliberately rather than letting one accrete.

RBAC vs ABAC vs ReBAC compared

RBAC ABAC ReBAC
Decides on Roles held by the user Attributes of subject, resource, action, environment Relationship paths between subject and object
Reference NIST model (1992), ANSI INCITS 359-2004, revised 2012 NIST SP 800-162 (2014, updated 2019) Google Zanzibar paper, USENIX ATC 2019
Example rule billing_admin can edit invoices Edit if same tenant and status is not locked View if member of a team that edits the parent folder
"Who can see X?" Easy lookup Hard: a computation over all attributes Answerable by graph expansion
State needed Role assignments Attributes on the request or fetched at decision time A relationship store kept in sync
Typical engines Built into apps and IdPs, Cerbos, OPA OPA (Rego), Cerbos, Cedar OpenFGA, SpiceDB
Main failure Role explosion, stale roles Unreadable policies, missing attributes Stale relationships, consistency lag

RBAC (role-based)

Access is granted through roles (admin, editor, viewer). NIST formalized the model in 1992 and it became ANSI INCITS 359 in 2004. Simple, well understood, and easy to audit, but it tends toward role explosion as every exception becomes a new role, and toward role accumulation when people change jobs.

How to implement RBAC, in brief: list the permissions your application exposes; group them into a small set of roles mapped to job functions; assign roles to groups from your identity provider, not to individuals; check permission on the server for every object; and review membership on a schedule. The implementing RBAC guide and role mining cover the detail.

ABAC (attribute-based)

Decisions use attributes of the user, resource, action, and context (department, region, time, sensitivity). NIST SP 800-162 describes ABAC as evaluating attributes of the subject, object and requested operation, and sometimes the environment, against policy. An ABAC policy in Cedar, the language behind Amazon Verified Permissions:

permit(principal, action == Action::"view", resource)
when { resource.tenant == principal.tenant && resource.status != "locked" };

Far more expressive than roles, but policies get hard to reason about. See implementing ABAC.

ReBAC (relationship-based)

Access flows from relationships between objects, the model behind Google Zanzibar. The Zanzibar paper reports trillions of access control lists, millions of authorization requests per second, 95th-percentile latency under 10 milliseconds and availability above 99.999% over three years. Relationships are stored as tuples:

folder:roadmap#editor@team:platform#member
document:q3-plan#parent@folder:roadmap

A check for "can Anne view q3-plan" walks from the document to its folder to the team Anne belongs to. ReBAC is ideal for sharing, hierarchies, and nested ownership, and it needs a relationship store and careful modeling. See RBAC to ReBAC.

What real systems actually do

The models are presented as alternatives and used as layers:

role: billing_admin          # coarse: can this class of user touch billing at all
condition: resource.tenant == principal.tenant AND resource.status != 'locked'

Trying to express the condition as roles produces role explosion. Trying to express the coarse grant as attributes produces policies nobody can audit.

The questions that decide the model

  • Does access depend on a relationship that changes constantly? Ownership, sharing, membership, folder inheritance. If yes, ReBAC.
  • Does access depend on data already on the request? Tenant, department, resource status, time. If yes, ABAC with a stateless engine, because there is no second data store to keep consistent.
  • Can you list the permissions on one page? Then RBAC is enough and adding an engine is overhead.

How access control fails in practice

  • No object-level check at all. The Optus breach in 2022 came from an internet-facing API that returned customer data without valid authorization, affecting about 9.5 million people. No model helps if the check is missing.
  • Roles that only grow. Mover entitlement accumulation is RBAC's typical failure: provisioning adds the new role and nothing removes the old one.
  • Bugs in the policy layer itself. CVE-2026-5712, a role-editing authorization flaw in SailPoint IdentityIQ, and CVE-2025-14778, a Keycloak UMA policy privilege escalation, show that the engine is part of your attack surface.
  • Delegation that widens access. In agent and microservice chains, one hop that trusts the scope a caller claims produces scope escalation through delegation.

The operational costs people underestimate

ReBAC means running a stateful service on the request path and reasoning about consistency: a check that reads stale relationship data grants stale access, and the window after a revocation is a real security property. ABAC means every attribute a decision depends on must be present in the request, which is easy for request-scoped data and hard for anything requiring a lookup. Both mean authorization is now a service that must be available, fast, and versioned, because a policy change is a production change.

Authorization engines in 2026

Engine Model Status and price (per SWI profiles)
Open Policy Agent Policy as code (Rego), RBAC and ABAC CNCF graduated, free; creators and many Styra staff joined Apple in August 2025
Cerbos YAML policies, RBAC and ABAC Engine free; Hub from $25 a month
Amazon Verified Permissions Cedar, RBAC and ABAC $5 per million single requests since June 2025
OpenFGA Zanzibar ReBAC CNCF incubating since October 28, 2025, free
AuthZed (SpiceDB) Zanzibar ReBAC SpiceDB free; cloud from $2 per hour
Oso Polar, all three in one model Oso Cloud quoted
Permit.io, Aserto Policy plus relationships Permit.io free Community plan, Enterprise quoted; Aserto Topaz engine free to self-host
SGNL Continuous, context-aware enterprise authorization Acquired by CrowdStrike, closed February 20, 2026

Whichever engine you choose, call it through the AuthZEN Authorization API 1.0, a Final OpenID Foundation specification since January 11, 2026, so the application code does not depend on one vendor's SDK. Compare engines in the best authorization tools ranking, OpenFGA vs Cerbos, AuthZed vs OpenFGA and the open source authorization tools roundup, and see fine-grained authorization.

Frequently asked questions

What is the difference between RBAC, ABAC and ReBAC?
RBAC (role-based access control) grants permissions through roles a user holds. ABAC (attribute-based access control) evaluates attributes of the user, resource, action and environment against a policy. ReBAC (relationship-based access control) derives access from relationships between objects, such as owner, member or parent folder. Most production systems combine them.
RBAC vs ABAC: which is better?
Neither in general. RBAC is better when permissions fit a short list of job functions and auditors need to read them. ABAC is better when access depends on context already on the request, such as tenant, region, time or data sensitivity. A common pattern is RBAC for the coarse grant and ABAC conditions for the fine-grained check.
What is ReBAC vs RBAC?
RBAC asks whether the user holds a role with the permission. ReBAC asks whether a chain of relationships connects the user to the object, for example user is a member of a team that is an editor of the folder that contains the document. ReBAC, popularized by Google's 2019 Zanzibar paper, fits sharing and hierarchies that would cause role explosion in RBAC.
What is an ABAC policy?
An ABAC policy is a rule that permits or denies an action based on attributes. NIST SP 800-162 describes ABAC as evaluating attributes of the subject, the object, the requested operation and sometimes the environment against policy. An example: permit view when the resource's tenant equals the user's tenant and the resource is not locked.
How do I implement RBAC?
Inventory the permissions your application exposes, group them into a small set of roles based on job functions, assign roles to groups from your identity provider rather than to individuals, enforce checks on the server for every object, and review role membership on a schedule. Watch for role explosion and for movers who keep old roles.
What is ABAC?
ABAC stands for Attribute-Based Access Control: access decisions are made from attributes of the user, resource, action, and context, such as department, location, or time. NIST's guide to it is SP 800-162, first published in January 2014 and updated in August 2019.
Are there open source RBAC and ReBAC engines?
Yes. Open Policy Agent and Cerbos are open-source policy engines commonly used for RBAC and ABAC. OpenFGA (a CNCF incubating project) and AuthZed's SpiceDB are open-source Zanzibar-style ReBAC engines. All are Apache 2.0 licensed.
Which access control model should I use?
RBAC is simplest for coarse roles, ABAC fits context-rich policies, and ReBAC suits fine-grained, relationship-heavy permissions such as document sharing and multi-tenant hierarchies. Many systems combine them.
Last reviewed By SWI Community TeamSuggest a correctionHow we research