Reference

Entitlement Strategy — RBAC, ABAC, RuBAC & Permissions for AI Agents

From role gates to policy bound to data. How RBAC (role-based), ABAC (attribute-based), and RuBAC (rule-based) access control actually relate; why role-based perimeters — WordPress roles, AWS IAM, Azure RBAC — stop at the door; and how the entitlement plane extends the same discipline to a subject the incumbents were never designed for: the AI agent.

PDF: entitlement-strategy.pdf


1 · Thesis

Every mainstream permission system answers one question: who may open the door? The questions that decide real-world outcomes are different: what does this specific subject hold, right now, on this specific object, under which terms — and how do we take it back? The entitlement plane answers those. Policy is data (purchase-granted roles carrying scoped capability caps), enforcement is at the data plane (per-asset envelope encryption; possession of bytes is worthless without a grant), revocation is an operation (rotate one key, every outstanding copy dies), and every decision leaves evidence (a hash-chained ledger, verifiable against a published key at /.well-known/jwks.json by anyone — no account, no trust in the platform required).

2 · The door-check pattern: three incumbents, one failure joint

WordPress rolesAWS IAMAzure RBAC / Entra
ModelRoles = flat bundles of global capabilities (edit_posts = all posts)Identity policies over control-plane APIs; tag-based ABAC governs resources, not app usersRole assignments at scopes; ABAC conditions narrow (e.g. blob storage)
Granularity stops atSite / post-type; per-object needs plugins enforcing in PHPThe AWS resource boundary — app users/objects are "your problem" (hence Cedar)The Azure resource boundary; app roles are coarse token claims
The naked filewp-content/uploads = public URL, zero policyS3 presigned URL = bearer access, irrevocable until expirySAS tokens = same bearer pattern
RevocationRole change ≠ recall of anything servedPolicy change ≠ recall of presigned URLsAssignment change ≠ recall of issued tokens

All three are perimeter authorization over containers. None bind policy to the data itself; all three have weak revocation. The industry has conceded the gap — AWS shipped Cedar / Verified Permissions, Google published Zanzibar (now OpenFGA), and OPA exists — all policy-as-data engines, all built because role gates do not compose into application-level authorization. The entitlement plane is the same conclusion, plus the step none of them take: cryptographic enforcement at the asset.

3 · RBAC, ABAC, RuBAC — the layered model is the standard

Purchase-granted roles carrying scoped capability caps are the Kuhn role-centric hybrid, implemented: the purchase grants the ceiling (RBAC); the caps, entitlement state, and consent snapshot are the attributes (ABAC); their evaluation per object, per request, is the rule layer (RuBAC).

4 · The entitlement plane, concretely

5 · Permissions for AI Agents — the subject the incumbents never modeled

Role systems assume a human who logs in occasionally and holds standing permissions. An AI agent is the opposite subject: it acts continuously, delegates, and cannot safely hold a role-wide grant — an agent with "Editor everywhere, forever" is an incident report with a timestamp. Agent authorization requires exactly the properties the entitlement plane already has:

Principle: agents get entitlements, never roles. A role is standing power; an entitlement is a scoped, revocable, evidenced grant. Standing power plus autonomy is how AI incidents happen.

6 · Terminology precision

7 · The application-scope boundary: RBAC-only stacks vs out-of-scope modules

The deeper split is not which acronym a stack implements but where its enforcement lives. WordPress, the cloud IAMs, and the modern Next.js stack (Sanity for content, Better Auth or Clerk for identity) all enforce inside the file system or application scope — the app is the guard. The entitlement plane's modules live outside both: policy as data at the edge, enforcement cryptographic at the asset.

WordPressAWS IAM / Azure RBACNext.js + Sanity + Better Auth / ClerkEntitlement modules — outside file-system & application scope
Where policy livesApp code + DB, inside the installCloud control planeApp middleware + role claims in the vendor's tokenPolicy-as-data at the edge, independent of any app deployment
Enforcement pointTemplate/render codeCloud API perimeterRoute guards — whatever code remembers to checkEvery request at the edge, plus cryptographically at the asset
Object granularityRole → site-wide capabilitiesResource / containerOrg & role claims; per-object = custom app codePer-subject × per-object × per-request entitlement
Re-delegationFiles & links forwardablePresigned URL / SAS = bearer accessToken holder asserts roleNon-discretionary: no holder can extend access
RevocationRole edit ≠ recallPolicy edit ≠ recall of issued URLsSession revoke stops future logins onlyKey rotation kills every outstanding copy
App compromisedGame over: the app was the guardInfra intact; granted scope exposedGame over: enforcement compiled into the appModules unaffected; attacker holds ciphertext
AI agentsNo modelService principals, standing powerAPI keys, standing powerMandates + caps.a2a: time-boxed, consent-anchored, ledgered
EvidenceLogs, if configuredControl-plane trails onlyVendor dashboardsHash-chained ledger; public JWKS verification

To be fair to the incumbents: Sanity, Better Auth, and Clerk solve authentication and role assertion well. The gap is that everything after the door — object authorization, delegation, revocation, evidence — remains application code, in application scope, sharing the application's fate.

8 · Strategy summary

LayerQuestion it answersMechanism
RBAC gate (door)Who may enter at all?Roles — including the incumbents' (WP/IAM/Azure), which coexist
Capability caps (ABAC)What can this subject do here, now?Purchase-granted scoped caps per request (NIST 800-162 / Kuhn hybrid)
Rule layer (RuBAC)Under which conditions?Per-request evaluation of caps, entitlement state, consent
Agent mandatesWhat may this machine do, for whom, until when?AP2 mandates + caps.a2a + JWE-resolved principal + consent snapshot
Data-plane cryptoWhat if every layer above fails?Envelope encryption; leak yields ciphertext; rotation = revocation
EvidenceCan anyone prove what happened?Hash-chained ledger; Ed25519 certificates; public JWKS verification

9 · References