Design authorization as a hybrid stack, not a single model choice. Use RBAC for organizational responsibility, ABAC for contextual gates such as environment or sensitivity, and ReBAC for ownership, sharing, and hierarchy. Keep application code on one stable check path, while policy decisions happen in the policy plane. That preserves flexibility, reduces brittle exceptions, and makes access easier to explain and audit.
How should teams combine RBAC, ABAC, and ReBAC without creating policy chaos?
Design the product around a single authorization architecture, not three competing ones. RBAC should answer who has a durable organizational role, ABAC should answer whether the current context permits the action, and ReBAC should answer whether a relationship such as ownership, sharing, or hierarchy exists. The point is not purity, it is clear division of responsibility.
That division matters because role logic, attribute logic, and relationship logic fail in different ways. If you collapse them into ad hoc code checks, teams end up with hidden exceptions, duplicated logic, and authorization that is hard to explain during review or incident response. A hybrid stack keeps the model legible while still letting each access rule live where it fits best.
In practice, the clearest design is to keep the application on one stable decision path and move policy into a dedicated policy plane. The application should ask a consistent question, then receive a decision that already reflects role membership, context, and relationship state. For teams comparing models, Authorisation Models Guide gives the cleanest map of where each model belongs in a combined design.
Where each model earns its place in the access decision
RBAC is strongest when the product needs stable responsibility boundaries, such as employee, admin, approver, or support-agent duties. It is easy to understand and easy to audit, but it becomes brittle when teams try to encode every exception in roles. That is usually the first sign the role model is being asked to carry logic that belongs elsewhere.
ABAC is the right layer for conditions that change with the request, such as environment, data sensitivity, device posture, geography, time, or workflow state. It gives precise control, but only if the attribute set is curated and trusted. Teams should treat attributes as policy inputs, not as a dumping ground for every field the platform can expose.
ReBAC is most valuable when access depends on ownership, collaboration, parent-child hierarchy, delegated sharing, or workspace membership that is better expressed as a graph than a role list. It is especially useful where the product’s data model already carries relationships. When those relationships drive business access, a dedicated relationship model is easier to reason about than repeated custom checks. Role Mining and Role Design Guide helps teams keep RBAC from absorbing relationship cases that should remain separate.
Used together, the three models are complementary rather than competing. RBAC gives durable entitlement structure, ABAC adds contextual precision, and ReBAC captures business relationships that would otherwise be buried in code. Teams that design around that split usually get better auditability and fewer one-off exceptions. The broader IAM and governance context is covered well in IAM and IGA Basics.
How to keep authorization explainable, testable, and auditable
The most important design choice is to define precedence and conflict handling before implementation. If a user is both in a role and outside a context gate, which rule wins? If a relationship grants access but an attribute denies it, which result is authoritative? Teams need those answers documented, because “it depends” becomes an audit finding very quickly.
Use one policy evaluation pattern for all checks so the application does not accumulate scattered logic. That makes it easier to test decision outcomes, replay access requests, and prove why a request was allowed or denied. It also reduces the risk that one service interprets the same rule differently from another service.
Model hygiene matters too. Roles should stay coarse enough to be maintainable, attributes should stay governed, and relationships should be sourced from a trusted system of record. If the product exposes many interdependent objects, lifecycle management becomes part of authorization quality because stale accounts, stale memberships, and stale ownership records distort the decision itself.
For products with machine-to-machine or automated access paths, policy must also account for non-human actors that share the same decision plane. The check may still be the same, but the operating assumptions are not. externalized authorisation is valuable precisely because it lets teams enforce one consistent logic path while changing the policy inputs, not the application code.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP API Security Top 10 addresses the attack and risk surface, while NIST SP 800-53 Rev 5 and OWASP ASVS set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| NIST SP 800-53 Rev 5 | AC-3 — Access Enforcement | Directly governs policy-based allow/deny decisions across mixed authorization models. |
| AC-6 — Least Privilege | Hybrid RBAC, ABAC, and ReBAC should still minimise granted access and exceptions. | |
| AU-12 — Audit Record Generation | Explainable hybrid authorization needs records that show which policy inputs drove each decision. | |
| Recommendation — Centralise enforcement in one decision point and apply policy consistently before access is granted. Constrain each role, attribute gate, and relationship grant to the minimum access needed. Log the policy inputs and decision outcome needed to reconstruct access approvals and denials. | ||
| OWASP ASVS | V8 — Authorization | ASVS V8 fits products that need testable, explainable authorization across roles, attributes, and relationships. |
| Recommendation — Verify that every protected action is authorised by a consistent server-side policy decision. | ||
| OWASP API Security Top 10 | API5 — Broken Function Level Authorization | Mixed authorization models often fail when function-level checks are scattered or inconsistent. |
| Recommendation — Test that privileged functions are blocked unless the policy plane explicitly grants access. | ||
Practitioner Guidance
What to prioritise: Start by classifying every access rule into one of three buckets, durable role, contextual condition, or relationship-based access. If a rule cannot be placed cleanly, that is usually a signal the product needs a clearer policy boundary rather than another custom exception.
What to verify: Verify that the same request produces the same decision across services, environments, and deployment states. If the answer depends on which microservice evaluated it, the model is not really centralised, even if the policy engine is.
Common mistake: Do not let RBAC become the catch-all for every exception. Role sprawl is usually a symptom that context and relationship logic were never separated, which makes review harder and overprivilege more likely.
Practitioner takeaway: The best hybrid designs are simple to explain even when the underlying policy is sophisticated, because the application asks one question and the policy plane answers it consistently.
Related resources from NHI Mgmt Group
- How should security teams design authorization checks for multiple actions on the same resource in one request?
- How should security teams design authorization so RBAC can evolve into finer-grained controls without a rewrite?
- How should security teams prioritise NHI remediation in cloud environments?
- How should security teams govern non-human identities at scale?
Deepen Your Knowledge
Reviewed and updated by the NHIMG editorial team on September 29, 2026.
NHI Mgmt Group — the #1 independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org