On this page
- Everyone had the right role. The AI crossed the wrong portfolio.
- Is RBAC enough for AI agents?
- Roles answer what. Scope answers where.
- Does a parent grant include its children?
- Authorization is only as good as its attributes
- Where does scope leak in an AI application?
- Retrieval: filter before you rank
- Context, models and memory inherit scope
- Agents and tools can't widen scope
- Approvals have a scope too
- Scope changes while work waits
- Make scope visible and testable
- Common anti-patterns
- Ten rules for taxonomy-scoped authorization
- The result: role simplicity without role blindness
- Frequently asked questions
- How Frozion scopes every agent action to the right part of the business
- Sources
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:
| Question | What answers it | Example |
|---|---|---|
| What kind of work? | Role or function | Analyze, approve, export, reconcile |
| Which enterprise boundary? | Tenant and legal entity | Tenant 42, European subsidiary |
| Which part of the business? | Taxonomy scope | Fund Alpha, Commercial Auto, Germany |
| Why is this happening? | Purpose | Claims decision, risk review, support |
| Which operation? | Action | Read, summarize, approve, invoke, commit |
| What's true right now? | State and environment | Approval 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.

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:
| Question | Unsafe assumption | What to declare instead |
|---|---|---|
| Does a parent grant include descendants? | Always inherit downward | Direction, depth, exceptions, whether it's transitive |
| Does access to a child imply the parent? | Yes, they're connected | Separate navigation, metadata and content access |
| A resource has several labels? | Permit if any matches | Whether all facets, any facet or a specific combination must match |
| One path permits, another restricts? | Use whichever is easier | Combining rules, deny precedence, when to send to a person |
| The taxonomy is a graph, not a tree? | Pick one parent | Evaluate every relevant relationship |
| A concept is missing or retired? | Treat as public | Deny, 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.

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:
| Test | Should hold | Failure signal |
|---|---|---|
| Same role, sibling branch | Acts only on the assigned branch | A sibling fund appears or shifts ranking |
| Parent and child grants | Inheritance follows declared rules | A parent grant exposes excluded children |
| Multi-label record | Every required facet is satisfied | One matching label overrides a restricted class |
| Reclassified after indexing | Derived artifacts update | Old chunks or summaries stay reachable |
| Long-running approval | Resume rechecks scope | Old approval survives a scope change |
| Broad service credential | Object-level scope still enforced | API accepts a valid token for an out-of-scope record |
| Support and replay views | Inspectors see only their scope | Prompts 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-pattern | Why it fails | What to do instead |
|---|---|---|
| Role-only authorization | A role says nothing about portfolio, region or legal entity | Intersect role with scope and record labels |
| One role per scope combination | Role explosion and stale copies of the org chart | Stable roles plus versioned scope attributes |
| Free-text scope tags | Labels drift, collide and lose hierarchy | Stable concept IDs, scheme, version and owner |
| Permit when any label matches | A permissive facet overrides a restricted one | Declare all-required and exception rules |
| Scope enforced only in the UI | Retrieval, tools and exports stay broad | Enforce at every consequential step |
| Filter after global ranking | Restricted branches still shape the answer | Apply scope before top-k and reranking |
| Agents inherit ambient scope | Sub-agents act with the parent's broadest access | Pass narrow scope explicitly and recheck locally |
| Global audit or replay view | Evidence becomes a disclosure path | Scope-aware inspection |
Ten rules for taxonomy-scoped authorization
- Use roles for job function and scope for business domain.
- Give every concept a stable ID, scheme, version, owner and source.
- Declare inheritance, multi-label, deny and missing-scope behavior.
- Derive scope from authoritative sources; never trust caller-supplied scope.
- Label every derived artifact (chunk, summary, feature, cache, output) with its source scope.
- Apply scope before retrieval budgets, ranking, model context and tool exposure.
- Pass equal or narrower scope to every sub-agent, workflow and approval.
- Version scope rules, and recheck them when work resumes or commits.
- Make scope checks visible to reviewers, and flag mappings that drop scope.
- 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.
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
- NIST Role Based Access Control projectThe RBAC model: roles, hierarchies and constraints.
- NIST SP 800-162, Attribute Based Access ControlAuthorization over subject, object, operation and environment attributes.
- NIST SP 800-205, Attribute Considerations for Access Control SystemsDecisions are only as good as attribute quality, freshness and management.
- NIST SP 800-192, Verification and Test Methods for Access Control PoliciesTest the policy model itself, not just the happy path.
- W3C SKOS ReferenceA neutral model for taxonomies and broader, narrower and related concepts.
- NIST SP 800-53 Rev. 5Access enforcement, information-flow enforcement and least privilege.
- OWASP API1:2023 Broken Object Level AuthorizationA valid function and object ID don't prove permission to act on that object.
- IBM, Cost of a Data Breach 202597% of organizations with an AI-related breach lacked proper AI access controls.
- W3C PROV-O: The PROV OntologyNeutral provenance relationships for tracing scope to outcome.
More in Governing AI agents
Identity & access 3
Runtime policy 3
Tools & MCP 1
Other topics



