Blog
Saved0

Taxonomy-scoped authorization for AI agents: when roles aren't enough

Everyone had the right role. The AI still crossed into the wrong portfolio. Why roles say what someone may do but not where, and how to scope agents by business domain.

LinkedIn
On this page
  1. Everyone had the right role. The AI crossed the wrong portfolio.
  2. Is RBAC enough for AI agents?
  3. Roles answer what. Scope answers where.
  4. Does a parent grant include its children?
  5. Authorization is only as good as its attributes
  6. Where does scope leak in an AI application?
  7. Retrieval: filter before you rank
  8. Context, models and memory inherit scope
  9. Agents and tools can't widen scope
  10. Approvals have a scope too
  11. Scope changes while work waits
  12. Make scope visible and testable
  13. Common anti-patterns
  14. Ten rules for taxonomy-scoped authorization
  15. The result: role simplicity without role blindness
  16. Frequently asked questions
  17. How Frozion scopes every agent action to the right part of the business
  18. Sources
The short answer

A role says what kind of work someone may do. Taxonomy scope says where: which portfolio, product line, region, legal entity or data class. AI agents need both, checked together at retrieval, model context, tool calls, approvals and resumes, because an agent can cross a business boundary without ever failing a role check.

Everyone had the right role. The AI crossed the wrong portfolio.

An investment manager runs one application for research, portfolio review and task creation. Dozens of people share the role Portfolio Analyst, but they don't cover the same funds. One analyst is assigned to Public Credit, North America, Fund Alpha. Another team uses the same role for Private Markets, Energy, Fund Delta. The screens show the first analyst only Fund Alpha, and the main database queries filter correctly.

The analyst asks the AI assistant: "Which holdings need action before month-end?" The retrieval service filters by tenant and role, but not by portfolio. A confidential valuation memo from Fund Delta lands in the candidate set. It isn't quoted in the answer, but it changes the ranking, and the model flags an issuer because of an acquisition the analyst isn't cleared to know about.

The model then proposes a risk-review task. The tool is visible because Portfolio Analysts may create risk-review tasks. The runtime checks the role, not the portfolio of the target record. A task appears inside Fund Delta.

Every component can defend itself. The user was in the right tenant, the role was valid, the tool was permitted, and the API accepted an authenticated service credential. The failure was a missing relationship between role, business domain, purpose and the state of the work.

Is RBAC enough for AI agents?

Not on its own. Roles describe what kind of work someone may do; they don't describe which portfolio, product, region or legal entity that work applies to, and agents cross those lines constantly.

Role-based access control is still one of the best tools enterprises have. It ties permissions to job functions instead of individuals, and the NIST model supports hierarchies and constraints. Nothing here argues roles are obsolete.

The problem is that one role spans many business domains. A claims reviewer may handle only commercial auto in two states. A legal approver may sign only for one region and legal entity. A support engineer may see evidence for one product line. Encoding each combination as its own role ("Portfolio Analyst, Fund Alpha, Europe, Temporary") produces role explosion. The role catalog becomes a fragile, out-of-date copy of the org chart.

The fix is to keep roles stable and ask the other questions separately:

QuestionWhat answers itExample
What kind of work?Role or functionAnalyze, approve, export, reconcile
Which enterprise boundary?Tenant and legal entityTenant 42, European subsidiary
Which part of the business?Taxonomy scopeFund Alpha, Commercial Auto, Germany
Why is this happening?PurposeClaims decision, risk review, support
Which operation?ActionRead, summarize, approve, invoke, commit
What's true right now?State and environmentApproval status, record revision, time, separation of duties

Roles answer what. Scope answers where.

An authorization taxonomy is a governed set of business concepts and their relationships: organization, product, geography, portfolio, document class, data classification, process stage. A record can sit in several at once. A contract can belong to a legal entity, a region and a restricted document class simultaneously.

Free-text tags don't cut it. "EMEA" in one system and "Europe" in another may or may not be the same thing. A safe taxonomy needs stable concept IDs, a declared scheme and version, an owner, lifecycle rules and a record of where each label came from. Display names can change without changing the concept; concepts can be retired or moved while the label still looks familiar. Standards such as W3C SKOS give you a neutral way to model concepts and broader/narrower relationships, but SKOS doesn't decide access. Policy does.

Effective permission is an intersection, not a lookup. Permit only when the role allows the action, the subject's scope covers the resource's scope, tenant and legal entity match, the purpose is allowed, the current state satisfies policy, and no deny, expiry or separation-of-duty rule blocks it.

Six overlapping inputs, role, scope, tenant, purpose, action and state, meeting at a single permit decision
Permission is the intersection of role, scope, tenant, purpose, action and current state, not a role lookup.

Does a parent grant include its children?

Only if your policy says so explicitly. Hierarchies simplify policy when inheritance direction, depth, exceptions and multi-label rules are declared, and quietly expose data when they're assumed.

Most taxonomy leaks come from informal assumptions about the tree:

QuestionUnsafe assumptionWhat to declare instead
Does a parent grant include descendants?Always inherit downwardDirection, depth, exceptions, whether it's transitive
Does access to a child imply the parent?Yes, they're connectedSeparate navigation, metadata and content access
A resource has several labels?Permit if any matchesWhether all facets, any facet or a specific combination must match
One path permits, another restricts?Use whichever is easierCombining rules, deny precedence, when to send to a person
The taxonomy is a graph, not a tree?Pick one parentEvaluate every relevant relationship
A concept is missing or retired?Treat as publicDeny, quarantine or route for reclassification

The last row matters most. Missing or ambiguous scope should produce a typed outcome (out of scope, unclassified, stale, needs review), never a silent default to broad access.

Authorization is only as good as its attributes

A perfectly written policy still gives the wrong answer when its inputs are wrong. NIST guidance on attribute-based access makes the point directly: confidence in a decision depends on how attributes are defined, kept accurate, secured and managed.

In practice, scope goes wrong when:

  • a user keeps an old portfolio assignment after a reorganization;
  • a document is reclassified, but its chunks, embeddings, summaries and cache entries keep the old label;
  • two systems use the same label for different concepts;
  • a data mapping drops the legal-entity or document-class field;
  • a feature is computed from records broader than the workflow consuming it;
  • a taxonomy changes while long-running work keeps the old interpretation.

Every scope-bearing attribute needs an authoritative source, a version, a freshness rule and provenance. Scope strings supplied by the caller, including by the agent, shouldn't be trusted at all.

Where does scope leak in an AI application?

Scope leaks wherever meaning is selected or created: retrieval and ranking, context assembly, model memory and caches, agent and tool calls, human approvals and long waits. Each needs its own check.

Retrieval: filter before you rank

If candidate generation, top-k budgets or reranking run across branches the user can't see, restricted material changes which allowed material survives, even when the final context contains only permitted text. That's exactly what happened with the Fund Delta memo. Apply scope before the candidate set is formed, label every chunk with its source scope, and push reclassification through to derived indexes. The same logic applies across tenants; see tenant isolation for agents and RAG.

Context, models and memory inherit scope

A model can cross a boundary without copying a sentence. It can summarize, infer, rank or propose an action based on restricted evidence. So a generated answer isn't scope-free just because it's new.

Agents and tools can't widen scope

A sub-agent or reusable workflow should receive scope equal to or narrower than its parent's, carried explicitly, and should check it again at its own retrieval and tool calls. Role-only tool visibility is the most common gap. An authenticated service credential proves the software may call the API. It doesn't prove this work may act on this record in this branch. This is the object-level authorization failure OWASP ranks first for APIs. See AI agent identity and delegated authority for how that authority should narrow at each hop.

Approvals have a scope too

A reviewer role doesn't confer authority over every proposal of that type. A legal approver for Germany shouldn't approve a French contract because it reached the same queue. The approval should record the reviewer's scope, the proposal's labels and the exact action approved, and be re-evaluated if the proposal moves across a boundary after review.

Scope changes while work waits

Long-running work adds time, which static role checks miss. While a case waits for a document or a signature, the user can move to another portfolio, the record can be reclassified, a concept can be split or merged, policy can change how inheritance works, or an approval can expire.

So record the taxonomy version and the assignments that actually resolved when the work started. Before resuming or committing, recheck anything whose legitimacy depends on the present. Then decide: continue, refresh attributes without changing what was authorized, narrow the context or tools, ask for reapproval, migrate to the new taxonomy version, or stop.

An agent request flowing through retrieval, context, model, tool call, approval and resume, with a scope check at each stage
Scope has to be checked wherever information is selected, created or acted on, including after a wait.

Make scope visible and testable

Scope is a relational question: which subject scope, resource labels, action, purpose and state meet at this point? That's easier to review when it's visible. Reviewers should be able to see concept IDs and labels, inheritance and deny rules, subject grants and expiry, where each check is enforced, and an explanation of why a simulated request is permitted or denied. Queries should show whether the scope filter runs before ranking or after. Mappings should flag fields that are dropped.

Then test the negative cases, not just the happy path. NIST's work on access-control verification stresses testing the policy model itself:

TestShould holdFailure signal
Same role, sibling branchActs only on the assigned branchA sibling fund appears or shifts ranking
Parent and child grantsInheritance follows declared rulesA parent grant exposes excluded children
Multi-label recordEvery required facet is satisfiedOne matching label overrides a restricted class
Reclassified after indexingDerived artifacts updateOld chunks or summaries stay reachable
Long-running approvalResume rechecks scopeOld approval survives a scope change
Broad service credentialObject-level scope still enforcedAPI accepts a valid token for an out-of-scope record
Support and replay viewsInspectors see only their scopePrompts or payloads from another branch appear

The strongest test is a single rule: no unauthorized branch may disclose information, influence ranking or reasoning, authorize a decision, enable a tool, receive an output or cause an effect for this piece of work.

Common anti-patterns

Anti-patternWhy it failsWhat to do instead
Role-only authorizationA role says nothing about portfolio, region or legal entityIntersect role with scope and record labels
One role per scope combinationRole explosion and stale copies of the org chartStable roles plus versioned scope attributes
Free-text scope tagsLabels drift, collide and lose hierarchyStable concept IDs, scheme, version and owner
Permit when any label matchesA permissive facet overrides a restricted oneDeclare all-required and exception rules
Scope enforced only in the UIRetrieval, tools and exports stay broadEnforce at every consequential step
Filter after global rankingRestricted branches still shape the answerApply scope before top-k and reranking
Agents inherit ambient scopeSub-agents act with the parent's broadest accessPass narrow scope explicitly and recheck locally
Global audit or replay viewEvidence becomes a disclosure pathScope-aware inspection

Ten rules for taxonomy-scoped authorization

  1. Use roles for job function and scope for business domain.
  2. Give every concept a stable ID, scheme, version, owner and source.
  3. Declare inheritance, multi-label, deny and missing-scope behavior.
  4. Derive scope from authoritative sources; never trust caller-supplied scope.
  5. Label every derived artifact (chunk, summary, feature, cache, output) with its source scope.
  6. Apply scope before retrieval budgets, ranking, model context and tool exposure.
  7. Pass equal or narrower scope to every sub-agent, workflow and approval.
  8. Version scope rules, and recheck them when work resumes or commits.
  9. Make scope checks visible to reviewers, and flag mappings that drop scope.
  10. Test sibling, parent-child, multi-label, reclassification and service-credential cases continuously.

The result: role simplicity without role blindness

Roles stay valuable as a stable vocabulary for job function. AI doesn't change that. It exposes the limit of treating role membership as the whole answer. Agents select evidence, write summaries, keep memory, call tools, wait for people and change records, and each of those steps can cross a portfolio, product, region or data class while the user stays in the right tenant with the right role.

Taxonomy-scoped authorization makes the domain boundary explicit and checks it every time it matters. A role decides the kind of work. Scope decides where that authority applies, and the record shows which branch of the business shaped every outcome.


Frequently asked questions

What is taxonomy-scoped authorization?

It limits a permission to the part of the business it applies to. A role grants the kind of work, and a versioned scope (portfolio, product, region, legal entity, data class) grants the domain. Access is permitted only where role, scope, purpose and current state all agree.

Is RBAC enough for AI agents?

Roles stay useful for describing job function, but they can't say which branch of the business the work applies to. Encoding every combination as a role causes role explosion. Keep roles stable and add scope attributes checked at every retrieval, tool and approval.

How do you stop RAG from leaking data across business units?

Apply the user's scope before candidate generation, ranking and top-k budgets, not after. Label every chunk, summary and embedding with its source scope, and update those labels when the source is reclassified, so restricted material can't shape the answer.

How does this work for agents we already run?

Route the agent's tool calls through a governed runtime over MCP or HTTPS. Each call runs under the delegated authority of the person the agent acts for, and is checked against role, taxonomy scope, purpose and the target record before it reaches your systems.

With Frozion

How Frozion scopes every agent action to the right part of the business

In Frozion, authorization combines roles (RBAC) with conditions (ABAC), taxonomy scope, purpose and record-level checks. Through Agent Delegation, every agent takes on the role and scope of the person it acts for and never exceeds that person's authority. Authority narrows at each hop and is rechecked when paused work resumes, right before the change. Policies are written in the Visual Policy Builder, so reviewers see which scope applies where, and every decision lands in one tamper-evident record.


Sources

  1. NIST Role Based Access Control projectThe RBAC model: roles, hierarchies and constraints.
  2. NIST SP 800-162, Attribute Based Access ControlAuthorization over subject, object, operation and environment attributes.
  3. NIST SP 800-205, Attribute Considerations for Access Control SystemsDecisions are only as good as attribute quality, freshness and management.
  4. NIST SP 800-192, Verification and Test Methods for Access Control PoliciesTest the policy model itself, not just the happy path.
  5. W3C SKOS ReferenceA neutral model for taxonomies and broader, narrower and related concepts.
  6. NIST SP 800-53 Rev. 5Access enforcement, information-flow enforcement and least privilege.
  7. OWASP API1:2023 Broken Object Level AuthorizationA valid function and object ID don't prove permission to act on that object.
  8. IBM, Cost of a Data Breach 202597% of organizations with an AI-related breach lacked proper AI access controls.
  9. W3C PROV-O: The PROV OntologyNeutral provenance relationships for tracing scope to outcome.
More in Governing AI agents

Governing AI agents

Identity & access 3
Runtime policy 3
Tools & MCP 1

Other topics

Pick up where you left off: