Strategy · Access Control · CRM Sync Platform · 2026-07-20

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.

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, with no account and no trust in the platform).

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; ABAC via tags exists but governs resources, not app usersRole assignments at scopes (subscription → resource); ABAC conditions narrow (e.g. blob storage)
Granularity stops atSite / post-type; per-object requires plugins enforcing in PHP at render timeThe AWS resource boundary; your application's users and objects are "your problem" — hence CedarThe Azure resource boundary; app roles are coarse claims stamped into a token
The naked filewp-content/uploads = public URL, zero policyS3 presigned URL = bearer access, irrevocable until expirySAS tokens = same bearer pattern
Revocation semanticsRole change ≠ recall of anything already servedPolicy change ≠ recall of presigned URLsAssignment change ≠ recall of issued SAS/tokens mid-lifetime

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

3 · The layered model is the standard, not a workaround

A role gate at the door with attribute rules underneath is the architecture the standards bodies recommend:

Where RuBAC fits. Rule-based access control (RuBAC) evaluates condition rules — time windows, network, object state — against a request. In NIST’s framing it is not a rival model but the policy half of ABAC: attributes describe the subject, object, and context; rules decide. A mature stack therefore layers all three: an RBAC gate at the door, RuBAC condition rules in the policy engine, and attributes carrying the per-subject, per-object facts those rules consume.

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); the evaluation of them per object and per request is the rule layer (RuBAC).

4 · The entitlement plane, concretely

5 · Agent & AI gating: 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. When the application is compromised, only one of these designs still holds.

WordPressAWS IAM / Azure RBACNext.js + Sanity + Better Auth / ClerkEntitlement modules — outside file-system & application scope
Where policy livesApp code + DB, inside the installCloud control plane (infra scope)App 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 & server components — 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 role; sessions replayable in scopeNon-discretionary: no holder can extend access
RevocationRole edit ≠ recall of anything servedPolicy edit ≠ recall of issued URLsSession revoke stops future logins; served data is goneKey rotation kills every outstanding copy at once
App compromised — then what?Game over: the app was the guardInfra intact; data within granted scope exposedGame over: enforcement was compiled into the appModules unaffected; the attacker holds ciphertext
AI agentsNo modelService principals with standing powerAPI keys with 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 evaluated per request (NIST 800-162 / Kuhn hybrid)
Agent mandatesWhat may this machine do, for whom, until when?AP2 mandates + caps.a2a + JWE-resolved principal + consent snapshot
Data-plane cryptoWhat happens 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

CRM Sync · Entitlement Strategy · v1.1 · 2026-07-20Monochrome · print / PDF ready