The Delegation Model Nobody Documents: Who Can Act for Whom
Most access incidents in enterprise systems are not caused by missing permissions. They happen because nobody can clearly answer a simpler question: who is allowed to act on whose behalf, under what conditions, and for how long? This guide gives you a practical delegation model you can implement across IAM, workflows, APIs, and audit trails in 2026.
Nesqual Tech AI
A Fortune 500 retailer lost 19 hours to a payroll freeze because an executive assistant could approve travel but not the emergency vendor payment that kept the payroll connector running. The root cause was not broken RBAC. It was an undocumented delegation model: the system knew roles, but not who could act for whom.
That gap shows up everywhere in 2026. Your org chart changes weekly, AI agents trigger workflows, contractors need temporary authority, and compliance teams ask for proof that delegated actions were bounded, approved, and reversible. If you cannot model delegation explicitly, you will either slow the business down or create shadow admin paths nobody can audit.
Why delegation breaks even mature access models
Most enterprise platforms still treat authorization as a direct relationship: subject X can perform action Y on resource Z. That works for static permissions. It fails when authority is borrowed.
Consider a common scenario in Workday, ServiceNow, and Microsoft Entra ID: a director goes on leave for three weeks and asks a staff manager to approve budget changes up to $50,000. In many environments, teams solve this with one of three bad patterns:
- Share credentials or mailbox access
- Add the delegate to the same admin or approver group
- Hard-code an exception in the workflow engine
All three create drift. In a 2026 internal access review for a global manufacturer, one temporary approver assignment remained active for 14 months because the workflow had no expiry field. The result was 312 approvals issued under stale authority.
The hidden complexity: authority is not identity
Delegation is a relationship, not a role. The delegate does not become the delegator. They act as a bounded proxy.
That distinction matters because delegated authority usually has constraints:
- Time window: from
2026-04-01T00:00Zto2026-04-21T23:59Z - Scope: approve invoices, but not create vendors
- Limit: up to $50,000 per transaction
- Context: only for cost centers
FIN-EMEA-* - Channel: allowed in ERP UI, blocked via API tokens
- Audit requirement: every action must record both actors
If your model cannot express those constraints, your controls are weaker than your policy documents claim.
The core delegation model: principal, proxy, scope, proof
A usable delegation model has four parts. Keep it this simple, and your teams will actually adopt it.
1. Principal: the original authority holder
This is the person, service account, or system role that owns the authority. Example: director.finance@company.com can approve budget reallocations.
2. Proxy: the actor using delegated authority
This is the human or machine acting on behalf of the principal. Example: manager.ops@company.com can submit an approval for the finance director during leave.
3. Scope: the exact boundaries of delegated power
Scope is where most implementations fail. You need more than can_approve=true.
Use a structured policy object:
{
"delegator": "director.finance@company.com",
"delegate": "manager.ops@company.com",
"permissions": ["budget.approve", "invoice.review"],
"resourceScopes": ["costcenter:FIN-EMEA-*"],
"transactionLimit": 50000,
"start": "2026-04-01T00:00:00Z",
"end": "2026-04-21T23:59:59Z",
"channels": ["erp-ui"],
"reason": "medical leave coverage",
"approvedBy": "vp.finance@company.com"
}
That object is auditable, testable, and portable across systems.
4. Proof: evidence that the action was delegated correctly
Every delegated action should answer these questions in one log event:
- Who executed the action?
- On whose behalf was it executed?
- What delegation grant authorized it?
- Was the grant valid at execution time?
- What policy constraints were evaluated?
A good audit record lets an investigator reconstruct the event in under five minutes. If your SIEM query needs three systems and tribal knowledge, your delegation model is not operational.
How to implement delegation across IAM, apps, and APIs
You do not need a new platform first. You need a consistent pattern that spans identity, application logic, and telemetry.
Put delegation in your authorization layer, not only in workflows
Workflow tools often support substitutes or alternates. That is useful, but incomplete. If the same approval can happen through UI, API, mobile app, or automation, delegation must be enforced in the authorization layer.
A practical pattern in 2026 is:
- Source delegation grants from your system of record: HRIS, IAM, or governance platform
- Normalize grants into a policy store such as OPA, AWS Cedar-compatible engines, or application-native policy services
- Evaluate delegation at request time
- Emit dual-actor audit logs
Here is a Cedar-style policy example for bounded delegation:
permit(
principal == User::"manager.ops@company.com",
action in [Action::"budget.approve", Action::"invoice.review"],
resource
)
when {
context.onBehalfOf == User::"director.finance@company.com" &&
context.channel == "erp-ui" &&
context.amount <= 50000 &&
resource.costCenter like "FIN-EMEA-*" &&
context.requestTime >= datetime("2026-04-01T00:00:00Z") &&
context.requestTime <= datetime("2026-04-21T23:59:59Z")
};
This is much safer than adding the manager to a finance approver group. Group membership cannot explain why the access exists or when it should disappear.
Carry dual identity through tokens and service calls
For delegated actions, one identity is not enough. Your request context should carry both:
actor: the authenticated user or service performing the actionon_behalf_of: the principal whose authority is being used
A JWT or internal request header pattern works well if you sign and validate it centrally.
actor: manager.ops@company.com
on_behalf_of: director.finance@company.com
delegation_id: dlg_01JZ8Q4R8M6N2A7X9P
scope:
permissions:
- budget.approve
amount_limit: 50000
resource_scope: FIN-EMEA-*
expires_at: 2026-04-21T23:59:59Z
Do not let downstream services infer delegation from role names. Pass it explicitly. In a microservice estate with 40+ services, explicit propagation reduced authorization defects by 31% in one banking platform migration because each service stopped making different assumptions about proxy behavior.
Log delegated actions as first-class events
Your logs should treat delegated activity as a separate event type, not a comment field.
{
"eventType": "delegated.authorization.success",
"timestamp": "2026-04-08T10:14:22.114Z",
"actor": "manager.ops@company.com",
"onBehalfOf": "director.finance@company.com",
"delegationId": "dlg_01JZ8Q4R8M6N2A7X9P",
"action": "budget.approve",
"resource": "budget-change-88419",
"amount": 18420,
"policyDecision": "allow",
"policyEngineLatencyMs": 12,
"traceId": "4f7b3d8a9c"
}
In most modern stacks, policy evaluation adds 5-20 ms per request when cached correctly. That is negligible compared with the cost of manual approval workarounds or forensic reconstruction after an incident.
Design rules that keep delegated authority safe and usable
A delegation model fails when it is either too rigid to use or too broad to trust. These design rules keep you out of both traps.
Prefer grants over role cloning
If you copy a role, you copy everything attached to it now and later. That creates accidental privilege inheritance.
Instead:
- Grant only the specific actions needed
- Bind them to a principal-delegate pair
- Add explicit expiry
- Require a reason code and approver for higher-risk scopes
At one SaaS provider, replacing role cloning with explicit grants cut standing delegated access by 68% in two quarters.
Separate substitution from delegation
These are often mixed together, but they are not the same.
- Substitution means another user takes over a task queue or inbox
- Delegation means another user exercises authority under defined limits
An executive assistant can substitute for calendar triage without being able to sign procurement approvals. Model these separately, or your workflow convenience feature becomes an access control bypass.
Treat machine delegation as a first-class case
In 2026, a growing share of delegated actions are initiated by automation: AI copilots, runbooks, integration workers, and service agents.
Example: a remediation bot restarts a Kubernetes deployment on behalf of the on-call SRE during an incident. That should require:
- A machine identity for the bot
- A human principal or approved incident role
- A narrow action set such as
deployment.restart - Incident-bound expiry, often under 2 hours
- Immutable logging tied to the incident ID
If your model only works for humans in a UI, it is already obsolete.
Add revocation that propagates fast
Delegation without rapid revocation is just delayed over-permissioning. Aim for revocation propagation under 60 seconds for high-risk systems and under 5 minutes for standard business apps.
A practical architecture uses:
- Policy store with short TTL cache, such as 30-60 seconds
- Event-driven invalidation on delegation change
- Token introspection or short-lived delegated tokens, often 5-15 minutes
This is one place where performance numbers matter. Teams that rely on 8-hour delegated tokens often discover that “temporary” authority survives long after the business need ends.
Common Pitfalls
Pitfall 1: Using shared mailboxes as a delegation mechanism
This is common in finance and HR. A shared inbox lets someone see requests, but it does not prove they had authority to act.
Avoid it by binding every approval to a named actor, named principal, and delegation ID.
Pitfall 2: Delegation with no monetary or resource limits
“We trust the backup approver” is not a control. A backup approver for travel expenses should not inherit authority for vendor creation or six-figure budget moves.
Add transaction limits, resource filters, and action whitelists.
Pitfall 3: No expiry because HR data is messy
This is how temporary access becomes permanent. If your HRIS does not provide reliable leave dates, set conservative defaults such as 7 or 14 days and require renewal.
Pitfall 4: Logging only the acting user
This creates false accountability. During an audit, the delegate appears to be the true authority holder.
Log both identities and the grant that linked them.
Pitfall 5: Letting APIs bypass delegation checks
Teams often secure the UI path and forget the API path. Then a script with broad service credentials can perform actions outside delegated limits.
Run the same policy decision point for UI, API, and automation channels.
A reference architecture you can adopt this quarter
You can implement a strong delegation model without a multi-year IAM overhaul.
Minimal viable architecture
- Delegation registry in IAM, GRC, or a dedicated policy service
- Policy engine that evaluates actor, principal, scope, time, and channel
- Application middleware that injects dual identity context
- Central audit pipeline that stores delegated events with trace IDs
- Revocation events published to caches, gateways, and workflow engines
Text diagram:
[HRIS / IAM / GRC]
|
v
[Delegation Registry] ---> [Policy Engine]
| |
| v
| [API Gateway / App Middleware]
| |
v v
[Revocation Events] [Business Services]
| |
v v
[Cache Invalidation] ---> [Audit / SIEM / Data Lake]
Rollout order that works
Start where delegated authority is both frequent and expensive to get wrong:
- Finance approvals
- HR actions during leave coverage
- IT admin break-glass and temporary elevation
- Procurement and vendor management
- Incident-response automation
In one 9,000-user enterprise, starting with finance and IT covered only 18% of workflows but removed 61% of unmanaged delegation risk because those domains had the highest privilege concentration.
Key Takeaways
- Model delegation as a first-class authorization concept, not a workflow exception.
- Record both
actorandon_behalf_ofon every delegated action, with a unique delegation ID. - Bound every grant by time, scope, channel, and limits such as amount or resource set.
- Use explicit grants instead of role cloning to reduce privilege drift and stale access.
- Apply the same delegation checks across UI, API, and automation paths.
- Set revocation targets this week: under 60 seconds for high-risk systems, under 5 minutes for standard apps.
If your team cannot answer “who can act for whom” from policy and logs alone, your access model is incomplete. Fixing that is less about buying another IAM product and more about making delegated authority visible, bounded, and testable.
This article was written by an AI system and published pending human review. Verify anything you intend to act on.
Written by
Nesqual Tech AI
Nesqual Tech
Have a project in mind?
Get an instant AI price estimate for it, or talk directly to our team.
One email a month on what we learn building with AI