Skip to main contentArrow Right
Essential Guide to Access Control Thumbnail

Table of Contents

Virtually every application has resources that need protecting and users who need to access them. Access control is the practice of deciding which users can reach which resources and what they can do when they get there.

Access control picks up where authentication leaves off, just after a user enters the digital doorway. While authentication confirms identity (i.e., “Is the user who they claim to be?”), access control determines and enforces permissions: what should this user be allowed to access and do? A system built with strong authentication but weak access control still leaves sensitive data and actions exposed to anyone who can clear the login screen.

Threat actors who gain initial access move laterally through an organization, looking for ways to elevate their illegitimate permissions through exploits like confused deputy scenarios. With the adoption of agentic AI, access control has become even more fundamental for security posture. IBM’s 2025 Cost of a Data Breach Report found that 97% of AI-related breaches occurred in organizations that lacked proper access controls.

The access control models in this guide offer different approaches to structuring and enforcing permissions. They vary in complexity, granularity, and the assumptions they make about how organizations and users interact with resources. Many production environments use more than one.

How access control began (and evolved)

The foundational problem that access control solves has been around since the very earliest multi-user systems: different users need different levels of access to different resources, and something has to enforce that separation. 

Initial approaches were flat by design, blunt instruments built for a now-defunct era of computing. 

  • Discretionary access control (DAC) let resource owners decide who else could access resources, which was flexible but depended entirely on individual judgment; DAC can operate through owner-managed access lists or through transferable capability tokens that don't depend on a single owner.

  • Mandatory access control (MAC) went the opposite direction, imposing classification-based restrictions from a central authority that no individual user could override. It's rigid by design, though it can co-exist with role-based architecture.

Both approaches were products of their time, suited for rigid environments where the user base was relatively small and the resources being protected were well-defined. Neither DAC nor MAC maps well onto how modern applications manage users, tenants, or resources at scale. 

What came after, and what the rest of this guide covers, was a progression toward models that could enforce more nuanced access policies without requiring either total user discretion or total central rigidity.

DAC / MAC

RBAC

FGA (ReBAC / ABAC)

Core approach

Owner discretion (DAC) or central classification (MAC)

Permissions assigned to roles, roles assigned to users

Permissions based on relationships, attributes, or both

Granularity

Coarse

Coarse to moderate

Fine

Flexibility

DAC is high but inconsistent; MAC is rigid by design

Moderate, with well-defined roles

High, with dynamic evaluation

Primary limitation

Doesn’t scale to modern use cases, multi-tenant applications

Role explosion at scale

Higher upfront complexity

Modern compatibility

Largely sunsetted; however, concepts persist in OS-level controls

Industry default, widely adopted across many verticals

Growing adoption for complex or collaborative environments

Access control vs. authorization

You’ll see the terms access control and authorization used interchangeably across the industry. According to OWASP, “access control and authorization mean the same thing.” A handful of older sources or highly regimented interpretations split authorization and access control into policy definition and enforcement layers, respectively.

In everyday implementation and across all Descope content, “access control” is synonymous with “authorization.” When you see one, it means the other, too.

Role-based access control (RBAC)

RBAC is the most widely used access control model in production today, and with good reason. It’s simple, easy to manage, and very effective for many use cases. Instead of assigning permissions to individual users (like in DAC above), permissions are assigned to role, and users are assigned to roles. An “Editor” can read and write. A “Viewer” can read. An “Admin” can do anything, including adding or removing new users or assigning roles beneath them.

RBAC is especially useful in cases where roles in an application correspond to roles in an organization. For example, a new employee would get a role that matches their job function, like “Team Member.” In an ideal scenario, permissions they need are already granted to that role, so it’s as simple as ticking a box.

RBAC deployments generally fall into three main categories:

  • Traditional RBAC is flat, where roles carry permissions, users carry roles, and the two elements never interact in complex ways.

  • Hierarchical RBAC layers roles by organizational seniority, so a “Manager” role inherits everything a “Team Member” role can do, plus additional permissions.

  • Constrained RBAC limits how many roles a user can hold simultaneously or which roles can coexist, preventing risky permission combinations.

RBAC Example (Microsoft Azure)
Fig: A diagram illustrating the key concepts in role-based access control (RBAC), as implemented in Microsoft Azure (Image credit: Microsoft)

In RBAC, the breaking point shows up at scale. When access requirements include significant diversity, administrators tend to create increasingly narrow roles for edge cases. Recall the example of the new employee above, who receives the “Team Member” role in their onboarding. Imagine they also need access to a database that typically only Managers can see—not all Team Members need access, just this one new employee.

This new role, “Marketing Editor, APAC, Quarterly Reports” makes sense when it’s just for one team and one purpose. But multiplied across departments and organizational touchpoints, and the result is role explosion: an unwieldy sprawl of roles so dense that auditing and maintaining them becomes its own operational discipline.

Role explosion is the clearest signal that it’s time to upgrade to fine-grained access control (FGA). When an organization’s access needs have outgrown what roles alone can express, it’s time for FGA: attribute-based and relationship-based access control.

Fine-grained access control (FGA)

When roles aren’t granular enough to meet an organization’s needs, the next step is fine-grained access control (or fine-grained authorization). FGA is an umbrella term for access control that evaluates multiple conditions rather than relying on a single consideration like a user’s role. Today, two core models fall under FGA: relationship-based access control (ReBAC) and attribute-based access control (ABAC).

Relationship-based access control (ReBAC)

ReBAC shifts the access decision from “what role does this user have” to “what is this user’s relationship to this resource?” Think of it this way: a user who created a document can edit and delete it. A user who was invited to a shared folder containing the document inherits its contents. A team lead can view performance data for their direct reports but not for other teams.

The model essentially works as a graph:

  • Entities (users, resources, groups, tenants) are nodes

  • Relationships (ownership, membership, parent-child hierarchies) are edges

Access decisions travel this graph to determine whether a valid path connects the requesting user to the target resource with the required permission. Google’s Zanzibar system, for example, powers access control across Calendar, Drive, and YouTube. It popularized this approach and remains the reference point most modern reBAC implementations draw from. 

ReBAC is a natural fit for environments where resources are user-generated and permissions need to vary on a per-resource basis. Think collaboration tools, document management systems, or platforms where different user types need different levels of access to the same end objects. 

Diagram titled ReBAC with the Descope logo in the top right corner. The subtitle reads Relationship-Based Access Control (ReBAC) is an authorization approach where permissions can be defined based on the relationships between entities, with "relationships between entities" highlighted in teal. Three relationship types are illustrated below. The Parent-Child Relationship on the left shows a Folder node connecting with arrows to three child nodes: File1, File2, and File3, demonstrating hierarchical resource relationships. The Ownership Relationship in the center shows a Martin node connecting with arrows to three owned resources: Martin's doc, Martin's video, and Martin's profile, demonstrating user-to-resource ownership. The Group Relationship on the right shows three user nodes (Thomas, Martin, and Declan) each connecting with arrows to a single Customer Success group node, demonstrating user-to-group membership. All nodes are displayed as rounded rectangles with teal borders on the dark blue background.
Fig: Diagram illustrating possible relationships between entities in ReBAC

If reBAC has a tradeoff, it’s the upfront investment. Defining relationship schema, maintaining it as the application matures, and ensuring that implied relationships resolve correctly takes more architectural work. This is why many organizations rely on an external identity vendor to provide the tools and framework for building a reBAC implementation, rather than building from scratch.

Our RBAC vs. ReBAC explainer covers the comparison in more detail.

Attribute-based access control (ABAC)

Where ReBAC models relationships between entities, ABAC evaluates properties of the access request itself. Unlike ReBAC, which is largely based on Google’s Zanzibar implementation, ABAC is officially formalized in SP 800-162

In this Special Publication, NIST defines ABAC as a methodology where decisions are made by evaluating attributes of the subject, object, requested operations, and environment conditions against policy. In more specific terms, these attributes could include:

  • User attributes (department, clearance, location) 

  • Resource attributes (sensitivity, category, classification)

  • Action attributes (read, write, delete)

  • Environmental attributes (time of day, network, device)

Considering these attributes allows policy to express rules RBAC cannot: allowing access to financial reports only for users in the finance department, only during business hours, only from managed devices or via corporate VPN. Each condition is an attribute, and the underlying policy evaluates them in combination.

Components of ABAC
Fig: An image describing the five components of ABAC, which includes subject, object, action, environment, and policy

ABAC’s flexibility comes with a slight tradeoff: opaque governance, or the difficulty of maintaining and auditing policy. The number of possible attribute combinations can grow multiplicatively, and without highly disciplined attribute classification and clear policy ownership, ABAC can become practically unmanageable. Policies may be technically correct but lack clarity for anyone trying to audit or edit them.

In our ABAC vs RBAC explainer, we compare how this tradeoff compares to the lack of granularity in a role-based model. 

In real-world scenarios , ReBAC, ABAC, and RBAC often work together. RBAC establishes what a user can do broadly (“this user has the Editor role, so they can create and edit documents), ReBAC can handle resource-level relationships (“this user owns this document, so they can delete it and manage who has access”), ABAC layers on contextual conditions (“but they can only take those actions from a managed device or network”).

Organizations that need fine-grained control often use elements of each, and they don’t necessarily abandon RBAC entirely. Each has a purpose, even if some are less about finesse than others.

Orchestrating access across different models

When a company runs RBAC for baseline permissions, ReBAC for resource relationships, and ABAC for contextual rules, they face a coordination hurdle: How do you enforce consistent access control policy across multiple models, applications, and user bases without fragmentation?

Policy-based access control (PBAC) addresses this at a conceptual level: centrally managed, versioned policies that govern access decisions regardless of the underlying model in question (RBAC, ReBAC, or ABAC):

  • A policy decision point evaluates whether a request satisfies the applicable rules

  • A policy enforcement point executes the decision

The value here is consistency and auditability, both elements that can be lacking to varying degrees in our three models. It’s especially vital to have some degree of policy orchestration in regulated industries where demonstrating access control compliance is a fundamental expectation.

The practical implementation of this coordination varies. Some organizations adopt dedicated policy engines with specialized languages like XACML. Others tackle it through identity orchestration: visual or code-based workflows that weave together role, relationship, and attribution checks along with risk signals and third-party actions. This approach offers the most seamless and observable result, but the right path can depend on a number of factors: an organization’s regulatory requirements, technical maturity, and how many moving parts (e.g., third-party risk analysis tools) need to talk to each other.

Ultimately, what matters is that the coordination layer exists and ties loose threads together. Without it, RBAC roles live on one system, ABAC attributes on another, and ReBAC schemas in a third, without one single point of visibility into what’s actually happening or being enforced. 

Access control for AI agents

The models above were designed for a world where the entity requesting access is a human with a defined organizational function or role. AI agents break that assumption in ways that are becoming hard to ignore. And, with exponentially increasing adoption, the scenarios documented in IBM’s Cost of a Data Breach Report (in which 97% of AI-related breaches had inadequate access controls ) are likely to explode without intervention.

The problem with AI agents and traditional access control models

An AI agent acts on behalf of a user but is not that user. It operates autonomously (or at least semi-autonomously),  chains actions across multiple systems, and can persist long after the authorizing user’s session ends. Give it the user’s own credentials, and it inherits permissions much broader than the task really requires. 

The options for revocation are limited and static to the point of being unwieldy. But if you give an AI agent a limited, static service account, it can’t request elevated access when a task demands it. In practice, this leads to risky configurations to avoid hitting obstacles. The OWASP Top 10 for Agentic Applications in 2026 reflects this trending threat: three of the top four risks (agent goal hijack, tool misuse and exploitation, identity and privilege abuse) are fundamentally access control issues.

Where traditional access control models fall short with agents

Early approaches in agentic access control leaned on the barebones primitives of auth frameworks. But the API keys, service accounts, and OAuth scopes typically used in agentic scenarios offer static boundaries that work best for predictable, narrow use cases. A script reading from one endpoint or a bot posting to one channel would be well-suited to these models. But not agents, which need flexibility and agility to complete their diverse tasks.

These models weren’t built for the dynamic nature of agents. An agent that schedules meetings, queries a database, drafts emails, and files developer tickets across multiple services needs credentials scoped per action and time-bound task. Traditional RBAC can assign a role to the agent, but it can’t differentiate between the agent connecting with a particular endpoint and trying to delete an entire production database in the same session. 

The rise of purpose-built, scoped agent identity

This gap has driven a shift toward treating agents as a distinct identity type with their own lifecycle, credential model, and access control surface. The response to this challenge looks like this:

  • Ephemeral credentials scoped to specific actions

  • Access granted through delegated consent rather than shared credentials

  • Policy enforcement that accounts for the agent, the authorizing user, and the sensitivity of the downstream resource

  • Everything auditable at the agent and tool level

A screenshot of a software consent interface on a white background. At the top, a red rectangular border encloses a Custom Warning Message that reads: Descope has marked this agent as "unverified!" You can configure the agents you trust using Agent Registration Flows. Below the warning, two icons—a red sunburst and a small photo of a cat—are separated by a double-sided arrow. The main heading below reads Connect MCP Server Demo with Claude, followed by the text: Claude will be able to:. This is followed by a list with three checked boxes: Schedule Meetings*, Read Contacts from HubSpot*, and Sends email*. At the bottom of the interface are two large buttons: a blue Authorize button and a white Cancel button with a blue border.
Fig: A screenshot of a consent screen, which would be shown to a user, requesting permission from an agent to connect with an MCP server

This is an obvious clean fit for the FGA concepts discussed earlier. ReBAC can model the relationship between an agent and the resources it’s authorized to touch. 

In RAG pipelines, for example, ReBAC-based post-retrieval filtering ensures that an agent only surfaces documents the requesting user is actually authorized to see, preventing data from leaking across user sessions or tenants. ABAC can layer on contextual conditions like time bounds, tenant scope, and user requirements. 

Because the entity being gated is autonomous, these scenarios demand tighter scoping, shorter-lived credentials, and more precise logging than human users might typically require. Descope’s Agentic Identity Hub implements these principles as an answer to the unique challenges of agentic access control. 

But the broader concept extends beyond any single vendor. As both OWASP and Gartner recommend across multiple trends reports, organizations should take a targeted, risk-based approach. Invest where gaps are greatest while leveraging automation (e.g., developer tooling) where possible.

Also Read: Securing Your APIs With Progressive Scoping

When to use each access control model

The models described in this guide are not mutually exclusive, as we’ve noted above. Most environments above a certain threshold of complexity run a hybrid system, and the question is less about “which model is best” and more “which combination fits the access patterns we’re actually dealing with.”

Access control models compared

The chart below examines the various access control models we’ve discussed in this guide across several dimensions. However, as previously mentioned, all these models can and often do work together.

RBAC

ReBAC

ABAC

Makes decisions based on

User roles

Entity relationships

User, resource, action, and environment variables

Granularity

Coarse to moderate

Fine

Fine

Implementation complexity

Low to moderate

Moderate to high

Moderate to high

Primary scaling concern

Role explosion

Schema maintenance

Attribute sprawl/opacity

Best for

Stable organizational structures with well-defined roles and functions

Collaborative platforms, user-generated content, hierarchical resources

Dynamic environments, regulated industries, context-dependent access scenarios

RBAC

This remains the right starting point for most applications. If roles are stable, permission sets are predictable, and there’s no need for per-resource granularity, RBAC on its own may be all that you need. The administrative simplicity and auditability are meaningful advantages.

ReBAC

The inflection point at which FGA becomes attractive is usually one of two things: role explosion or resource-level access requirements. When the first happens, FGA is officially on the table. When the environment aligns with the second, ReBAC is the natural solution. The tradeoff is greater complexity in maintenance, but probably less than managing countless roles.

ABAC

However, when access decisions depend on context that neither roles nor relationships can capture (time, location, device, data type), ABAC fills the gap. ABAC is especially well-suited as a supplemental model, as it can catch all the various conditions the others don’t. It’s perfectly competent on its own, but the risk of opaque (and practically un-auditable) attributes increases if they grow too numerous.

The path most organizations follow uses RBAC for 80% of cases and FGA for the remaining 20% that would otherwise require an unmanageable number of narrow roles. Centralized policy coordination enters the picture when the number of models and enforcement points in play warrants a single view of what’s actually happening. 

Ultimately, the “right” access control method isn’t the most granular one available. Just because a model can be very specific doesn’t mean it fits your needs right now. The best choice is the one that actually satisfies the security and operational needs in front of you, while still being manageable for the team you have now.

Implementing access control that fits your needs

Descope provides the tools to implement and orchestrate access control across RBAC, ReBAC, and ABAC without building anything from scratch. Our authorization approaches cover the entire access control framework, from setting up roles and permissions to defining relationship schemas and attribute-based conditions.

For a hands-on walkthrough of how these models work together, this video demonstrates FGA in an IoT device context. For applications running fine-grained authorization at scale, Descope also offers FGA Cache, which accelerates ReBAC and ABAC checks by caching authorization data locally within your cluster.

To explore how Descope provides access control solutions end to end, sign up for a Free Forever Descope account, or connect with like-minded builders on our Slack community, AuthTown.