Skip to content
Cybersecurity · Authorization

Top 5 Authorization and Policy-Based Access Control (PBAC) Tools: AuthZed, Oso, Permit.io, Cerbos, and PlainID Compared

Fine-grained authorization platforms compared for ReBAC, ABAC, and policy-as-code at application scale.

By Deepak Gupta·Jun 10, 2026·15 min·5 tools compared
AuthorizationPBACReBACAccess ManagementCybersecurity

Quick Comparison

ToolBest ForPolicy ModelDeploymentPricingOpen Source
AuthZed (SpiceDB)ReBAC at scale, Zanzibar fidelityRelationship-based (Zanzibar) + CEL caveatsSelf-host / Cloud / DedicatedOSS free; Cloud usage-based; Dedicated customYes (Apache 2.0)
OsoUnified RBAC/ReBAC/ABAC with data filteringPolicy-as-code (Polar)OSS library or Oso CloudOSS free; Cloud from ~$149/moYes (library)
Permit.ioFull platform on open standards, startup-friendlyPolicy-as-code (OPA/Rego + Cedar)SaaS control plane + self-hosted PDPFree to 1,000 MAU; from ~$150/moCore engines open
CerbosStateless, self-hosted YAML decision pointPolicy-as-code (YAML + CEL)Stateless PDP sidecar; optional HubPDP free; Hub free to 100 MAPYes (Apache 2.0)
PlainIDEnterprise PBAC governance across apps/data/AIPBAC (ABAC/XACML lineage)Enterprise platform (PDP/PAP/PIP)Custom / contact salesNo
1

AuthZed (SpiceDB)

Best Overall

Best for: Relationship-based authorization at scale

AuthZed's SpiceDB is the most faithful open-source implementation of Google's Zanzibar design, making it the gold standard for relationship-based access control. If your authorization model is fundamentally about relationships -- nested groups, resource hierarchies, and access that flows through chains of connections -- nothing else matches its consistency guarantees and proven scale.

Pros

  • The most faithful open-source Zanzibar implementation: a true relationship graph database with a dedicated schema language, a Watch API for real-time cache invalidation, and the zed CLI
  • Solves the New Enemy Problem with ZedTokens (the Zookie analogue), giving per-request consistency control to trade freshness for latency where it matters
  • Caveats add conditional ABAC-style logic via CEL on top of the relationship graph, and it backs onto production datastores including Cloud Spanner, CockroachDB, PostgreSQL, and MySQL

Cons

  • High operational complexity: you model a custom schema, sync all relationship data into a dedicated datastore, and run it as a critical low-latency distributed service
  • The Zanzibar graph mental model has a steep learning curve and can be hard to debug for teams used to writing rules in code
Honest Weakness: SpiceDB is powerful but it is not lightweight. Running it means operating a stateful, low-latency distributed system, maintaining a custom relationship schema, and continuously syncing your application's relationship data into SpiceDB's datastore -- a dual-write consistency problem you own. The Zanzibar graph model is genuinely unintuitive for teams accustomed to attribute or rule based authorization, and self-hosting at scale effectively requires Kubernetes plus careful datastore selection. For many teams the honest answer is to pay for AuthZed Cloud or Dedicated rather than carry that operational burden in-house.

Policy Model (ReBAC / Zanzibar)

SpiceDB is relationship-based, not policy-as-code. You write a schema defining object types, the relations between them, and the permissions computed from those relations, then store concrete relationship tuples such as document:readme#viewer@user:alice. Permission checks traverse this graph rather than evaluating a rules expression. One sharp edge is that a relationship can reference another relation but not a permission, so permissions are easy to refactor while relations are not. Caveats layer CEL-based conditions on top for attribute-style logic like IP allowlists and time windows.

Architecture and Deployment

SpiceDB is a stateful database that persists relationships in a backing store (Spanner, CockroachDB, PostgreSQL, or MySQL) and is best self-hosted on Kubernetes. It uses hotspot caching from the Zanzibar paper and a Watch API for cache invalidation. Consistency is governed by ZedTokens, encoded points-in-time that let each request pick its freshness and latency tradeoff and prevent the New Enemy Problem. The bulk of implementation complexity lives in causal ordering and snapshot reads at the datastore layer.

Performance and Scale

Designed for Google-scale authorization, SpiceDB scales horizontally and uses replica reads plus caching to keep checks fast. The consistency model is the key lever: minimize_latency reads likely-cached data for speed, while at_exact_snapshot guarantees correctness at a cost. This explicit freshness control is what lets it serve high-throughput, low-latency checks without sacrificing correctness where it matters.

Free (OSS, Apache 2.0) / Cloud usage-based / Dedicated + Enterprise custom

Visit AuthZed (SpiceDB)
2

Oso

Runner Up

Best for: Unified RBAC, ReBAC, and ABAC with data filtering

Oso pairs a purpose-built declarative policy language (Polar) with a managed service (Oso Cloud) that centralizes both authorization logic and data. Its standout feature is data filtering: it returns SQL WHERE fragments so you can authorize entire list endpoints without N+1 checks. It is the most developer-ergonomic option for teams that want one mental model spanning roles, relationships, and attributes.

Pros

  • Polar is a single declarative language that cleanly expresses RBAC, ReBAC, and ABAC together, avoiding the one-tool-per-pattern problem
  • Best-in-class data filtering: the local check API returns a SQL expression so you can filter authorized rows directly in your own database, the cleanest answer to list-endpoint authorization
  • Oso Cloud is a managed service with globally replicated servers targeting single-digit-millisecond latency and high uptime, centralizing authorization data so apps just ask yes, no, or yes-if

Cons

  • Polar is a logic-programming-style language with its own learning curve; it is powerful but unfamiliar to engineers expecting plain code or YAML
  • The most capable path (centralized data plus data filtering) leans on Oso Cloud, so the strongest experience is tied to the paid hosted product
Honest Weakness: Oso's strategic center of gravity has shifted from the embeddable open-source library toward Oso Cloud, and the richest capabilities -- centralized authorization data, local authorization, and SQL data filtering -- shine most in the managed product. Polar's logic-programming model is elegant but genuinely novel, and teams underestimate the ramp-up and the difficulty of debugging complex rules. Because local authorization returns SQL fragments tied to your schema, you accept a degree of coupling between policy and database structure that pure decision-point tools avoid.

Policy Model (Polar)

Polar is Oso's purpose-built declarative, logic-based language for authorization. Rather than separate engines for each pattern, you express roles, relationships, and attribute conditions in one policy. Oso Cloud can answer not just yes or no but yes-if-conditions, deferring some evaluation to the client against local data, which is the basis of local authorization. This hybrid keeps a single source of truth for logic while letting hot-path data live close to the application.

Architecture and Deployment

Oso Cloud runs as a managed control plane that stores authorization data centrally and answers checks over the network, with servers replicated globally for low latency. For latency-sensitive or data-heavy cases, local authorization distributes evaluation: the service returns conditions or SQL that your app evaluates against its own database. This avoids round-trips and the need to replicate all application data into the authorization service.

Developer Experience and Data Filtering

Oso's signature strength is filtering lists of authorized data. The local check API returns a SQL expression -- a full query or a WHERE-clause fragment -- that you splice into your own queries, so an endpoint like list documents this user can read becomes one filtered database query instead of a check per row. Combined with Polar's unified model, this makes Oso especially attractive for product teams building data-dense application authorization.

Free (OSS library) / Cloud free dev tier, paid from ~$149/mo / Enterprise custom

Visit Oso
3

Permit.io

Best Value

Best for: Full authorization platform on open standards

Permit.io wraps proven open-source engines (OPA, plus its own OPAL for real-time policy and data distribution) into a managed control plane with a no-code UI, SDKs, and APIs. It is the most batteries-included platform here: policy-as-code that compiles to Git and deploys in real time, while decision points run as sidecars in your own environment. Its MAU-based pricing and generous free tier make fine-grained authorization unusually accessible to startups.

Pros

  • Built on open standards and open source: OPA/Rego and AWS Cedar policy engines, with the open-source OPAL layer pushing live policy and data updates to agents
  • SaaS control plane plus self-hosted Edge PDP: decision points run as a sidecar, centralized service, or cluster next to your apps, keeping decisions local and low-latency
  • Strong developer surface: a no-code policy UI for RBAC, ABAC, and ReBAC, a GitOps workflow that writes policy-as-code into Git, plus SDKs, APIs, and Terraform

Cons

  • The architecture (control plane plus OPAL plus bundled OPA PDP plus API server) is more moving parts to understand and operate than a single stateless binary
  • MAU-based billing can be hard to predict for apps with large or spiky user populations, even with the resource-quota model layered on top
Honest Weakness: Permit.io is an integration and orchestration layer over other engines (primarily OPA, with Cedar support), which is pragmatic but means your decision ceiling is partly bound to those upstreams and to Rego's learning curve when you outgrow the UI. Running the self-hosted PDP correctly -- as a sidecar or cluster kept in sync via OPAL -- is more operational surface than tools that ship a single stateless binary. The MAU pricing model is friendly at the low end but requires forecasting unique authorized identities, which can be awkward for B2C-scale or highly variable workloads.

Policy Model (policy-as-code over OPA and Cedar)

Permit.io is policy-as-code rather than a relationship database. It exposes RBAC, ABAC, and ReBAC through a no-code UI that generates policy as code (Rego for OPA, or Cedar) directly into Git, then deploys it in real time to the running agents. This lets non-engineers author policy in a graphical interface while engineers keep everything versioned and reviewable. The open-source OPAL layer watches both policy and data for changes and pushes live updates to the decision points.

Architecture and Deployment

The control plane runs as SaaS while the PDP runs in your environment, bundling OPA, an OPAL client, and an API server into what becomes your authorization microservice. You deploy the Edge PDP as a sidecar, a centralized service, or a cluster close to your apps, so checks stay local and fast while policy and data sync flow from the hosted plane via OPAL. This separation keeps sensitive decisioning in your network while offloading management.

Developer Experience

Permit.io is the most platform-like option: a graphical policy editor, GitOps, broad SDK coverage, REST APIs, Terraform, and audit tooling. The tradeoff for that breadth is conceptual surface area, since you must understand how the UI, Git-committed policy, OPAL distribution, and the bundled OPA PDP fit together. For teams that want fine-grained authorization without hand-writing and operating Rego from scratch, it removes most of the undifferentiated heavy lifting.

Free to 1,000 MAU / Startup from ~$150/mo / Enterprise custom

Visit Permit.io
4

Cerbos

Best Open Source

Best for: Stateless, self-hosted decision point with YAML policies

Cerbos is a stateless policy decision point that evaluates human-readable YAML policies (with CEL conditions) in sub-millisecond time, deployed as a sidecar with no database of its own. Its simplicity is the selling point: policies read cleanly in pull requests, the PDP scales horizontally, and it runs anywhere including air-gapped environments. The tradeoff is that it does not maintain a centralized relationship store, so graph-style ReBAC is approximated through attributes and hierarchy functions.

Pros

  • Stateless and self-hosted by design: each PDP loads YAML policy files and evaluates in memory with no external calls or per-instance database, making it trivially horizontally scalable and air-gap friendly
  • Human-readable policies: YAML plus CEL conditions are fast for application engineers to read and review in pull requests, lowering the authorization learning curve
  • Sub-millisecond decisions at thousands of checks per second per instance; Cerbos Hub adds managed policy distribution and Synapse can enrich requests with external identity data at decision time

Cons

  • No native centralized relationship graph: ReBAC is done via resource attributes and hierarchy functions rather than stored relationship tuples, which is weaker for deep nested-group models
  • Because the PDP is stateless and makes no external calls during evaluation, you are responsible for passing all needed context in each request, which pushes data-gathering work onto the caller
Honest Weakness: Cerbos's stateless purity is also its main constraint: it holds no relationship data, so anything resembling true ReBAC must be encoded as attributes and hierarchy functions or supplied as request context, which gets awkward at the complexity SpiceDB and Oso handle natively. The PDP never calls out during evaluation, so the burden of fetching principal and resource data falls on your application, or on Cerbos Synapse, a newer enrichment layer with its own setup. For relationship-centric domains, Cerbos can feel like you are rebuilding graph logic inside policies; for attribute and role driven authorization, that same minimalism is a genuine strength.

Policy Model (YAML and CEL)

Cerbos is policy-as-code expressed in structured YAML resource and role policies, with conditions written in CEL (Common Expression Language). It supports RBAC, ABAC, ReBAC, and PBAC patterns, but ReBAC specifically is implemented through resource attributes and hierarchy functions rather than a stored relationship graph. The design goal is readability: policies look like simple expressions reviewable in a pull request, optimized for application engineers over authorization specialists.

Architecture and Deployment

Each Cerbos PDP is stateless: it loads policy files into memory and never makes external calls during a decision, so it needs no database of its own and scales horizontally by adding instances. It deploys as a sidecar or serverless function alongside your app and runs in air-gapped, high-security environments. Cerbos Hub is the optional managed control plane that distributes policies to your PDPs, which still run in your environment for security and latency. Cerbos Synapse can connect to identity providers, databases, and custom sources to enrich requests before they reach the PDP.

Performance and Scale

A single instance handles thousands of requests per second at sub-millisecond latency because evaluation is in memory with no I/O on the hot path, comfortably fitting the roughly one-millisecond authorization budget microservices target. The flip side of no external calls is that throughput and correctness depend on the caller passing complete context, or on Synapse pre-fetching it, so performance is excellent as long as data gathering is solved upstream.

Free (PDP, Apache 2.0) / Hub free to 100 MAP, then per-principal / Enterprise custom

Visit Cerbos
5

PlainID

Best for Enterprise

Best for: Enterprise PBAC governance across apps, data, and AI

PlainID is an enterprise authorization platform built around Policy-Based Access Control (PBAC), aimed at large organizations that must standardize and govern access across many systems at once. Its strength is breadth and governance: prebuilt Authorizers for APIs, data, and microservices, a graphical Policy Administration Point for business stakeholders, and the Policy 360 view for centralized policy visibility. It is the least developer-tool-like and the most identity-security-suite-like option here.

Pros

  • Enterprise breadth: a wide catalog of prebuilt Authorizers and integrations spanning applications, APIs, data platforms, and microservices, so PBAC can be standardized across a whole estate
  • Governance-first: a graphical Policy Administration Point lets technical and non-technical stakeholders author policy, and Policy 360 consolidates each policy's logic, metadata, dependencies, and actions into one view
  • Strong fit for data and AI authorization: dynamic authorization for data access, API security, Zero Trust, and fine-grained guardrails over AI and agent pipelines, including a LangChain integration

Cons

  • Enterprise-oriented and sales-led: no public pricing and a significant platform footprint, which is heavy for a single app or a startup
  • Less developer and code-centric than SpiceDB, Oso, Permit.io, or Cerbos -- the center of gravity is a centralized platform and admin UI rather than a lightweight library in your repo
Honest Weakness: PlainID is built for the enterprise authorization-governance problem, not for a developer who wants to drop an authorization library into a service this afternoon. It is a commercial, sales-led platform with no public pricing, a broad footprint, and an adoption curve that assumes identity and security teams, not just app engineers. Its XACML-lineage PBAC model is powerful for attribute and policy driven decisions across many systems, but it is less naturally suited to deep relationship-graph authorization than SpiceDB or Oso. For small teams it is almost certainly overkill; its value appears when you must centralize, audit, and govern access policy across a large heterogeneous estate.

Policy Model (PBAC)

PlainID is centered on Policy-Based Access Control, an evolution of ABAC and XACML where access is governed by centrally managed policies evaluated against identity, context, and resource attributes. Policies are authored in a graphical Policy Administration Point usable by technical and non-technical stakeholders, then enforced consistently across many integrated systems. The Policy 360 feature adds a consolidated view of each policy's logic, metadata, dependencies, and actions for discovery and audit. This is governance-grade authorization rather than embed-in-your-service authorization.

Architecture and Deployment

PlainID follows the classic decision-point, administration-point, information-point, and enforcement-point decomposition. The decision point makes real-time decisions, the administration point is the central authoring interface, the information point pulls attribute data from across the environment for context, and PlainID Authorizers act as enforcement points embedded at access boundaries for APIs, data, and microservices. This standards-aligned architecture is what lets it sit across a heterogeneous enterprise estate rather than a single codebase.

Data and AI Authorization

A major focus is dynamic authorization for data and AI. PlainID provides data authorizers for fine-grained data-access control, API authorizers for API security, and Zero Trust enablement, with policies that react immediately to changes in roles or context. For AI, it integrates with frameworks like LangChain to embed PBAC into agent pipelines, enforcing fine-grained authorization across prompts, data retrieval, tool usage, and response generation so agents stay within defined guardrails.

Custom / contact sales (enterprise annual)

Visit PlainID

Which One Should You Pick?

Use CaseOur Recommendation
Multi-tenant SaaS with nested teams, projects, and resource hierarchies (Google-Docs-style sharing)AuthZed (SpiceDB). The model is fundamentally relational, with access flowing through chains of group and resource relationships, which is exactly what Zanzibar-style ReBAC was built for. Its relationship graph and consistency tokens handle deep nesting and access-via-a-path far better than attribute-based tools.
Authorize list and index endpoints efficiently (show only the rows a user can see) without N+1 checksOso. Its local authorization and data filtering return a SQL WHERE fragment you splice into your own query, turning per-row checks into a single filtered database query. This is the cleanest answer to list-endpoint authorization among the five.
Startup that needs fine-grained authorization fast, with a no-code policy UI and a standards-based engine on a tight budgetPermit.io. The free tier covers 1,000 MAU with full features, it generates policy-as-code (OPA/Rego or Cedar) from a graphical UI into Git, and PDPs run as sidecars in your own environment. It is the most batteries-included, budget-friendly on-ramp.
Air-gapped or high-security service that needs simple, reviewable authorization with no extra database and tight latencyCerbos. The PDP is stateless, runs as a sidecar with no datastore, makes no external calls during evaluation, and decides in sub-millisecond time. YAML plus CEL policies review cleanly in pull requests, ideal for regulated, offline-capable deployments.
Large enterprise standardizing and governing access policy across many apps, APIs, data platforms, and AI agentsPlainID. Its PBAC platform, prebuilt Authorizers, graphical administration point for business stakeholders, and Policy 360 governance view are designed to centralize and audit authorization across a heterogeneous estate, including AI pipelines, a breadth the developer-first tools do not target.

Frequently Asked Questions

What is the difference between ReBAC, ABAC, and PBAC, and how do I choose?
ReBAC (relationship-based) decides access by traversing a graph of relationships -- user belongs to team, team owns project, project contains document -- and is ideal for nested groups and resource hierarchies, where SpiceDB and Oso excel. ABAC (attribute-based) decides from attributes of the user, resource, and context such as department, owner, time, or IP, and PBAC (policy-based) is the broader, centrally governed evolution of ABAC where those rules live in managed policies, which is where Cerbos, Permit.io, and PlainID lean. Many real systems are hybrids, which is why Oso and Permit.io support RBAC, ReBAC, and ABAC together. Choose ReBAC when access is about connections between entities, and ABAC or PBAC when it is about attributes and centrally governed rules.
What is Google Zanzibar and why does it keep coming up?
Zanzibar is the system described in Google's 2019 paper on its consistent, global authorization system, which powers permissions for Google Docs, Drive, YouTube, and more. It models authorization as relationship tuples in a global graph and introduced concepts like Zookies (consistency tokens) to avoid stale-permission bugs known as the New Enemy Problem. SpiceDB is the most faithful open-source implementation, which is why it anchors ReBAC discussions, while OpenFGA and Permify are other Zanzibar-inspired projects. If your authorization is relationship-heavy and must scale, Zanzibar-style systems are the reference design.
When do I need a dedicated authorization service instead of just middleware or if-statements in my code?
Inline checks and middleware are fine for simple role checks in a single service, but they break down once authorization logic is duplicated across services, needs to be audited or changed without redeploying code, or must answer list everything this user can access. A dedicated service centralizes policy, gives you consistency and audit trails, and decouples authorization changes from application releases. Cerbos and Permit.io target exactly this transition for application teams, while SpiceDB and Oso add relationship modeling and data filtering. The trigger is usually multiple services, non-trivial rules, or compliance requirements.
Is build-vs-buy worth it, and what about the latency of an external authorization check?
Building your own authorization looks cheap until you need consistency guarantees, data filtering, audit logging, a policy UI, and relationship modeling, all of which these vendors have already solved, often on open-source foundations you can self-host. On latency, the leading tools are engineered for the roughly one-millisecond-per-check budget microservices target: Cerbos evaluates in memory with no external calls at sub-millisecond times, Permit.io and SpiceDB run decision points or replicas close to your app, and Oso Cloud uses local authorization to avoid round-trips. The pattern that keeps latency low is running the decision point as a sidecar or local replica rather than calling a distant central API on every check.

Related Comparisons