This prompt is designed for identity and access management (IAM) workflows where an AI agent or automated system is about to execute a user permission change. Its job is to generate a concise, structured summary of the planned change before execution, creating a human-readable checkpoint. Use this prompt when you need to capture the principal, the scope of access being granted or revoked, a separation-of-duties check, and a clear justification. This is a required step before any irreversible IAM action in a governed system. The audience includes platform engineers, security engineers, and compliance teams building AI-assisted access management tools.
Prompt
User Permission Change Confirmation Prompt

When to Use This Prompt
Defines the exact job, required context, and operational boundaries for the User Permission Change Confirmation Prompt.
The ideal user is an engineering team embedding this prompt into a ticketing system, a Slack bot, or an internal admin tool. The required context includes the requesting user's identity, the target resource or role, the type of change (grant, revoke, escalate, or modify), the business justification, and any relevant policy documents. The prompt is not a replacement for an identity provider's policy engine; it is a summarization and confirmation layer that sits before the actual API call to the IAM system. Do not use this prompt for real-time authentication decisions, session validation, or cryptographic operations.
Before wiring this prompt into production, define the sensitivity tiers for permission changes in your organization. A role assignment for a read-only dashboard viewer may require only a summary log, while a production database admin grant should force a multi-stakeholder approval with a break-glass justification. The prompt template below expects a [RISK_LEVEL] variable that your harness should compute from the target resource's classification, not from the model's own judgment. If the model hallucinates a risk downgrade, your harness must catch it before routing the confirmation to a human reviewer.
Use Case Fit
Where this prompt works, where it fails, and the operational prerequisites for safe deployment in identity and access management workflows.
Good Fit: Structured IAM Changes
Use when: the permission change is well-defined (e.g., add user to group, grant role, revoke scope). The prompt excels at summarizing the principal, resource, and access level in a human-readable checkpoint. Guardrail: Always pair with a downstream approval router that enforces sensitivity-based routing.
Bad Fit: Ambiguous or Composite Requests
Avoid when: the request bundles multiple unrelated permission changes or uses vague language like 'give them what they need.' The model may hallucinate a coherent summary that masks underspecification. Guardrail: Use an Ambiguous Intent Clarification prompt upstream before this summary is generated.
Required Inputs
Risk: Missing fields produce a summary that looks complete but omits critical scope or justification. Guardrail: The harness must validate the presence of principal_id, permission_type (grant/revoke), resource_arn, and justification before calling the model. Reject incomplete payloads with a structured error.
Operational Risk: Separation of Duties
Risk: The prompt includes a separation-of-duties check, but the model cannot access real org charts or ticket histories. It may flag false positives or miss real conflicts. Guardrail: Treat the model's SoD flag as a signal, not a decision. Route any positive flag to a manual review queue and log the model's reasoning for auditor review.
Operational Risk: Approval Routing Bypass
Risk: A well-formed summary can create a false sense of safety, leading teams to skip the actual approval step. Guardrail: The harness must block execution until an explicit approval signal is received from the correct authority. The summary is a checkpoint, not a substitute for the approval action.
Variant: Emergency Access
Risk: Standard justification fields are too slow for incident response. Guardrail: Create a variant with a shorter justification field and a mandatory incident ticket ID. The harness should auto-escalate to an on-call approver and enforce a time-bound automatic revocation window.
Copy-Ready Prompt Template
A structured prompt that generates a confirmation summary for a pending user permission change, ready to be wired into an approval harness.
This prompt template is designed to be the core instruction set for generating a human-readable checkpoint before a user permission change is executed. It forces the model to summarize the change, assess its scope, and flag separation-of-duties concerns. The output is not the final approval itself but the structured evidence a human or an automated policy engine needs to make an informed decision. Use this template as a direct input to your model, replacing the bracketed placeholders with data from your identity and access management (IAM) system.
codeYou are an access control auditor. Generate a structured confirmation summary for the following pending user permission change. Do not execute the change. Your output must be a strict JSON object. [CHANGE_DETAILS] Action: [ACTION_TYPE: GRANT, REVOKE, or MODIFY] Principal: [USER_EMAIL_OR_ID] Target Resource: [RESOURCE_NAME_OR_ARN] Permissions: [LIST_OF_PERMISSIONS] Requested By: [REQUESTER_EMAIL] Justification: [USER_PROVIDED_JUSTIFICATION] [CONTEXT] Current User Groups: [LIST_OF_CURRENT_USER_GROUPS] Current Direct Permissions: [LIST_OF_CURRENT_DIRECT_PERMISSIONS] Sensitive Resource Classification: [CLASSIFICATION_LEVEL: e.g., PII, PCI, PHI, INTERNAL, PUBLIC] [OUTPUT_SCHEMA] { "summary": "A one-sentence, plain-language summary of the change.", "principal": "The user or service account affected.", "change_type": "grant, revoke, or modify.", "scope_of_access": "A clear description of what the principal will be able to do after the change.", "separation_of_duties_concern": { "flag": true or false, "reason": "If true, explain the conflicting permissions or roles. If false, state 'No conflict detected.'" }, "risk_level": "low, medium, or high based on the sensitivity of the resource and scope of access.", "required_approval_routing": "Based on risk level, suggest 'auto-approve', 'manager_approval', or 'security_approval'." } [CONSTRAINTS] - If the action is GRANT and the resource is classified as PII, PCI, or PHI, the risk_level must be at least 'medium' and required_approval_routing must not be 'auto-approve'. - If a separation_of_duties_concern is flagged as true, the required_approval_routing must be 'security_approval'. - Base your output strictly on the provided context. Do not infer permissions not listed.
To adapt this template, integrate it into your IAM workflow's pre-execution hook. The [CHANGE_DETAILS] and [CONTEXT] placeholders should be populated by your application layer by querying your user directory and permission database. The [OUTPUT_SCHEMA] is your contract; parse the resulting JSON to drive your approval logic. For high-risk changes, ensure the generated summary is logged immutably alongside the final approval decision to create a complete audit trail. The next step after generating this summary is to route it to the approval queue specified in the required_approval_routing field.
Prompt Variables
Required inputs for the User Permission Change Confirmation Prompt. Each variable must be populated before the prompt is assembled and sent. Validation notes describe how the harness should check the variable before injection.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[REQUESTED_CHANGE] | The permission delta being requested: grant, revoke, or modify | GRANT: 'read:invoices' on 'prod-db' | Must match enum: GRANT, REVOKE, MODIFY. Reject if null or empty. |
[PRINCIPAL_ID] | The identity (user, service account, group) receiving the change | user:alice.chen@corp.com | Must match URN pattern (user|svc|group):identifier. Validate against identity provider. |
[TARGET_RESOURCE] | The resource or scope the permission applies to | arn:aws:s3:::finance-bucket/invoices/* | Must be a valid resource identifier for the target system. Check format per resource type. |
[JUSTIFICATION] | The business reason for the change, captured from the requester | Alice needs read access to run monthly reconciliation reports | Must be non-empty and exceed minimum length (e.g., 20 chars). Reject placeholder text like 'as needed'. |
[REQUESTER_ID] | The identity of the human or system initiating the request | user:manager.bob@corp.com | Must match URN pattern. Must differ from [PRINCIPAL_ID] for self-approval detection. |
[SENSITIVITY_LEVEL] | The data classification or risk tier of the target resource | HIGH | Must match enum: LOW, MEDIUM, HIGH, CRITICAL. Derived from data catalog, not user input. |
[CURRENT_PERMISSIONS] | The principal's existing permission set before the change | ['read:reports', 'write:reports'] | Must be a valid JSON array. Compare with [REQUESTED_CHANGE] to detect privilege escalation. |
[SEPARATION_DUTIES_CONTEXT] | List of conflicting permissions that would violate SoD policies | ['write:invoices', 'approve:payments'] | Must be a valid JSON array. If null, SoD check is skipped. If non-empty, prompt must flag conflicts. |
Implementation Harness Notes
How to wire the User Permission Change Confirmation Prompt into an identity and access management workflow with validation, routing, and audit logging.
This prompt is designed to sit directly before an identity and access management (IAM) write operation in an agent or automated workflow. Its job is to produce a structured, human-readable checkpoint that captures the full scope of a permission change, the principal involved, and any separation-of-duties conflicts. The harness should never allow the downstream IAM API call to proceed until the confirmation output has been generated, logged, and, for sensitive changes, explicitly approved by a human. Treat the prompt output as a gating artifact, not as a logging afterthought.
The implementation harness must enforce a strict sequence: first, collect the required inputs—[REQUESTING_USER], [TARGET_PRINCIPAL], [PERMISSION_CHANGE_DETAILS], [JUSTIFICATION], and [SENSITIVITY_LEVEL]. The [SENSITIVITY_LEVEL] field (e.g., low, medium, high, critical) should be derived from a predefined policy, such as the tier of the resource being accessed or the role being granted. Before calling the LLM, validate that all inputs are non-empty and that the justification is not a trivial placeholder. After receiving the model's structured output, parse it against a strict schema that includes summary, scope_of_access, separation_of_duties_conflicts, and risk_notes. If parsing fails, retry once with a repair prompt; if it fails again, block the action and escalate to an on-call channel.
The approval routing logic lives in the harness, not the prompt. For low sensitivity changes, the harness may auto-approve after logging the confirmation to an audit trail. For medium and above, the harness must route the formatted summary to a review queue, such as a Slack channel, a Jira ticket, or a dedicated approval UI, and block until an authorized approver responds. The harness should enforce a time-to-live (TTL) on the approval request; if the TTL expires, the action is automatically rejected and the requestor is notified. For critical changes, require multi-stakeholder approval as defined by your organization's access control policy. Every step—input collection, prompt call, output validation, routing decision, and human response—must be logged immutably with timestamps and actor identities for audit and governance reviews.
Expected Output Contract
Fields, format, and validation rules for the JSON output of the User Permission Change Confirmation Prompt. Use this contract to parse, validate, and route the generated summary before presenting it for human approval.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
change_summary | string | Must be a single sentence describing the permission change, principal, and target resource. Length between 10 and 200 characters. | |
principal_identifier | string | Must match the [PRINCIPAL_ID] input format (email, UPN, or UUID). Regex validation against expected identifier pattern required. | |
permission_type | enum | Must be one of: 'grant', 'revoke', 'modify'. Schema check against allowed enum values. Reject if null or unexpected value. | |
scope_of_access | object | Must contain 'resource_type' (string) and 'resource_identifier' (string). Resource type must match [RESOURCE_TYPE] input. Resource identifier must be non-empty. | |
justification_summary | string | Must be a non-empty string between 20 and 500 characters. Harness must verify justification was captured from [JUSTIFICATION] input and not fabricated by the model. | |
separation_of_duties_flag | boolean | Must be true if the change creates a known SoD conflict based on [EXISTING_PERMISSIONS] context. False otherwise. Harness must cross-check against a defined SoD policy matrix. | |
sensitivity_level | enum | Must be one of: 'low', 'medium', 'high', 'critical'. Derived from [RESOURCE_CLASSIFICATION] input. Harness must verify the output level matches the input classification. | |
approval_routing | object | Must contain 'required_approvers' (array of strings, min 1 item if sensitivity is 'high' or 'critical') and 'routing_rationale' (string). Harness must validate that routing matches organizational policy for the sensitivity level. |
Common Failure Modes
What breaks first when generating user permission change confirmations and how to guard against it.
Missing Separation-of-Duties Conflict
What to watch: The prompt summarizes the permission change but fails to detect that the requester is granting themselves a privileged role or combining conflicting permissions. Guardrail: Add a pre-generation check that compares the requester and the target principal; if they match and the permission is privileged, flag for mandatory second-approver routing.
Vague Scope Description
What to watch: The output says 'User will have admin access' without specifying the resource scope, environment, or time-bound conditions. Guardrail: Require structured input fields for [RESOURCE_SCOPE], [ENVIRONMENT], and [EXPIRY] before the prompt runs. Validate that each field is present in the generated summary.
Justification Field Left Blank
What to watch: The confirmation summary is generated but the business justification is empty, templated, or contains placeholder text like 'as requested.' Guardrail: Add a validator that rejects summaries where the justification is fewer than 20 meaningful characters or matches a deny-list of generic phrases. Block approval routing until justification is captured.
Sensitivity Level Misclassification
What to watch: A permission change that grants access to PII, financial data, or production infrastructure is classified as 'low sensitivity' and routed through a lightweight approval path. Guardrail: Implement a sensitivity scoring table in the harness that maps resource types and permission levels to minimum sensitivity tiers. Override model-classified sensitivity with the table lookup.
Approval Routing Bypass
What to watch: The prompt generates a correct summary but the harness fails to route it to the required approvers, or the routing logic has a default 'auto-approve' fallback. Guardrail: Enforce a deny-by-default approval router. If no matching approval policy is found for the sensitivity level and resource type, escalate to a security admin queue rather than defaulting to approval.
Stale Principal Context
What to watch: The prompt uses cached user attributes (department, manager, current permissions) that changed between the time of request and the time of summary generation. Guardrail: Fetch the principal's current group memberships, access levels, and employment status at generation time. Include a freshness timestamp in the summary and reject summaries where source data is older than a configurable TTL.
Evaluation Rubric
Criteria for testing the User Permission Change Confirmation Prompt before deployment. Each row defines a pass standard, a failure signal, and a concrete test method to validate output quality.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Principal Identification | Output includes the exact user identifier, display name, and source system for the principal whose permissions are being changed. | Missing, truncated, or ambiguous principal identifier. Output uses an email when a UUID is required. | Schema validation: [PRINCIPAL_ID] field is non-null and matches the expected format. Check against input payload. |
Permission Delta Clarity | Output clearly separates granted and revoked permissions in distinct sections with resource scope for each. | Permissions are listed in a single undifferentiated block. A revocation is described as a grant. Scope is missing. | Keyword presence check: 'Granted' and 'Revoked' sections exist. Parse each permission entry for a resource and action pair. |
Separation-of-Duties Check | Output includes a boolean [SOD_VIOLATION] field and lists any conflicting permissions that would violate separation-of-duties policies. | [SOD_VIOLATION] is null or missing when a known conflict exists. The explanation field is empty when the flag is true. | Test with a golden dataset of permission pairs known to violate SoD. Assert [SOD_VIOLATION] is true and [SOD_DETAIL] is non-empty. |
Justification Capture | Output contains a non-empty [JUSTIFICATION] field sourced from the request context or explicitly states 'No justification provided'. | [JUSTIFICATION] field is null or an empty string. The output hallucinates a justification not present in the input. | Assert [JUSTIFICATION] is a string with length > 0. For a test input with no justification, assert the field equals the exact fallback phrase. |
Sensitivity Level Classification | Output assigns a [SENSITIVITY_LEVEL] from the defined enum (LOW, MEDIUM, HIGH, CRITICAL) based on the permissions and resources involved. | Level is not from the allowed enum. A CRITICAL permission change is classified as LOW. Field is missing. | Enum check: [SENSITIVITY_LEVEL] is in ['LOW','MEDIUM','HIGH','CRITICAL']. Test with a CRITICAL permission (e.g., root account access) and assert level is CRITICAL. |
Approval Routing Instruction | Output includes an [APPROVAL_ROUTE] field specifying the required role or individual based on [SENSITIVITY_LEVEL] and organizational policy. | [APPROVAL_ROUTE] is 'none' for a HIGH sensitivity change. The field contains a generic placeholder instead of a specific role. | Test with a HIGH sensitivity input. Assert [APPROVAL_ROUTE] is not null and contains a role identifier from the allowed policy list. |
Irreversibility Warning | Output contains a warning message if the change is irreversible or has a significant recovery time, with an estimated rollback difficulty. | A permanent deletion of admin access has no warning. The warning is present for a reversible group membership change. | Test with an irreversible action (e.g., delete root credentials). Assert [WARNING] field is non-empty. Test with a reversible action and assert [WARNING] is null or empty. |
Output Schema Validity | The entire output is valid JSON matching the defined [OUTPUT_SCHEMA] with all required fields present. | Output is missing a required field. A field has an incorrect data type (e.g., string instead of array). Trailing text outside the JSON object. | Automated JSON Schema validator. Assert no extra fields. Assert all required fields in the schema are present and have correct types. |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Start with the base prompt and a simple JSON schema. Use a single sensitivity level and skip the separation-of-duties check. Focus on getting the summary structure right before adding routing logic.
codeYou are an IAM assistant. Generate a confirmation summary for the following permission change. [PERMISSION_CHANGE_DETAILS] Return JSON with fields: principal, action (grant/revoke), permission_scope, affected_resources, and risk_level (low/medium/high).
Watch for
- Missing
affected_resourceswhen scope is broad - Risk level defaults to "low" without reasoning
- No distinction between direct and inherited permissions

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us