Application · lesson 20 of 30 · Feedback, Status, And System State

Permission denied state

Underlying principle: Status connects an action to a real system event. A useful message names the current state, its consequence, and the next available action.

Use permission denied state when the system knows the user is authenticated but their role, group, share, license, policy, or approval status blocks a specific object or action.

Start with the decision

Does this fit your task?

A signed-in user lacks permission to view, edit, publish, export, delete, approve, share, administer, or configure a resource.

Review the boundary: Compare the task with the alternatives in the decision section.

Review the decision →
Study the interaction

Follow the task before choosing the component

Status connects an action to a real system event. A useful message names the current state, its consequence, and the next available action.

01 / Recognize the need

What the person is doing

The product has accounts, roles, teams, sharing links, private objects, licenses, compliance policy, or admin-only actions.

02 / Design the response

What the interface must communicate

Use permission denied state when the system knows the user is authenticated but their role, group, share, license, policy, or approval status blocks a specific object or action.

Whole-object access denied state.

03 / Judge the outcome

What to look for

Can the user tell whether this is missing access, wrong account, policy, or system failure?

The denial is durable until the permission, account, role, policy, or request state changes.

Decision first

Choose this pattern when the problem matches

Use when

  • A signed-in user lacks permission to view, edit, publish, export, delete, approve, share, administer, or configure a resource.
  • A wrong account or missing team membership is a likely cause.
  • An access request, owner approval, switch-account flow, or read-only fallback can help the user recover.

Avoid when

  • The operation failed for network, server, validation, data, or timeout reasons after permission was granted.
  • Revealing request, owner, object, or policy details would violate privacy or security policy.

Problem it prevents

The product has accounts, roles, teams, sharing links, private objects, licenses, compliance policy, or admin-only actions.

Test the behavior

Try strong and weak versions of the interaction

Open the working example, try its controls, and compare the behavior against the decision guidance.

In the lab you can
  • switch between strong UI, weak UI, strong UX, and weak UX;
  • trigger required, empty, loading, error, and recovery states;
  • inspect keyboard and accessibility expectations beside the demo.
Launch Permission denied state in the lab
Pattern anatomy

What a strong implementation has to make clear

User need

The product has accounts, roles, teams, sharing links, private objects, licenses, compliance policy, or admin-only actions.

Pattern promise

Use permission denied state when the system knows the user is authenticated but their role, group, share, license, policy, or approval status blocks a specific object or action.

Required state

Whole-object access denied state.

Failure to inspect

Users keep retrying a request that will always fail until access changes.

Access contract

Move focus to the permission message when it replaces page content or blocks a workflow.

Quality bar

The difference between expert and weak execution

Strong implementation

Specific, visible, recoverable

  • A report page says Quarterly revenue report requires Finance viewer access, shows the current account, names the report owner, and offers Request access and Switch account.
  • A viewer can read a document but the Publish action says Editor access is required and links to the owner rather than disabling the button silently.
  • A private repository settings page says Admin role required to manage secrets while preserving read access to permitted repository content.
  • A user opens a restricted report, sees which account is signed in, requests viewer access with a reason, then sees that the request is pending with the owner.
Weak implementation

Vague, hidden, hard to recover from

  • A denial page says Something went wrong and shows Retry even though the user lacks a required group.
  • Every workspace control is disabled after one missing permission, including safe navigation and read-only tasks.
  • Users keep retrying a request that will always fail until access changes.
  • A wrong-account user requests access for the wrong identity instead of switching to an already authorized account.
UI guidance
  • Show the blocked object or action, current account, permission level, required role, owner, and request path when revealing that information is allowed.
  • Use a no-disclosure variant when policy must hide existence, title, path, owner, count, or collaborator details from the current account.
UX guidance
  • Use permission denied state when the system knows the user is authenticated but their role, group, share, license, policy, or approval status blocks a specific object or action.
  • Help users self-correct through request access, switch account, read-only fallback, contact owner, return to allowed work, or review request status instead of sending them into retry loops.
Implementation contract

What the implementation must handle

States

  • Whole-object access denied state.
  • Action-level denied state for publish, export, delete, invite, approve, manage, or configure actions.
  • Read-only state with edit denied but view allowed.
  • Request access form with optional reason and requested permission level.

Interaction

  • The denial is durable until the permission, account, role, policy, or request state changes.
  • Request access records the requested role, reason, requester account, target object or action, owner destination, and timestamp when policy allows.
  • Switch account returns to the intended resource after authentication when possible.
  • Read-only fallback preserves allowed viewing and safe navigation while blocking only restricted actions.

Accessibility

  • Move focus to the permission message when it replaces page content or blocks a workflow.
  • Associate action-level permission messages with the affected control using visible text and accessible descriptions.
  • Announce request sent, pending, approved, and declined changes through a polite status region.
  • Keep request, switch account, contact owner, read-only view, and safe navigation controls reachable by keyboard.

Review

  • Can the user tell whether this is missing access, wrong account, policy, or system failure?
  • What object or action is safe to name, and what must stay hidden?
  • Which current account, role, team, or share grant is being evaluated?
  • What role or permission is required for the blocked action?
Evidence trail

Source-backed claims behind this guidance

Microsoft SharePoint access requests

Microsoft Support - checked

SharePoint documents access requests, owner routing, approve or decline outcomes, permission-level assignment, and request history.

Google Drive file access requests

Google Docs Editors Help - checked

Google Drive documents You need access, request access, owner notification, approved or denied outcomes, pending cases, wrong-account recovery, and policy limits.

Full agent/debug reference

Problem Context

  • The product has accounts, roles, teams, sharing links, private objects, licenses, compliance policy, or admin-only actions.
  • A user is authenticated but cannot view, edit, approve, publish, delete, export, invite, manage, or configure a known object or action.
  • The same surface may need different outcomes for wrong account, missing role, read-only access, pending request, declined request, policy block, and no-disclosure security.
  • The product must balance recovery and support with privacy, security, and least-privilege rules.

Selection Rules

  • Choose permission denied state when the primary cause is missing authorization, role membership, share grant, license entitlement, approval, or organization policy.
  • Show the access boundary at the smallest useful scope: whole page, panel, row, file, field, toolbar action, submit step, or admin setting.
  • State what the user can still do, such as view read-only content, copy an ID, return to allowed folders, request access, contact owner, or switch account.
  • Say which account, workspace, group, or role is currently active when wrong-account recovery is plausible.
  • Name the required permission or role in user-facing language, such as Finance viewer, Editor, Publisher, Owner, Maintainer, or Admin.
  • Include request state after submission: sent, pending, approved, declined, expired, owner unavailable, or blocked by policy.
  • Use a no-disclosure denial when exposing object existence, title, owner, path, or count would leak private information.
  • Use error state when the user has access but the operation failed for network, validation, server, timeout, or data reasons.
  • Use empty state when there is no safe known object or blocked action to recover, and the main issue is absence of visible items.
  • Replace disabled-button-only treatment with explanatory permission text, owner/contact path, and allowed fallback.

Required States

  • Whole-object access denied state.
  • Action-level denied state for publish, export, delete, invite, approve, manage, or configure actions.
  • Read-only state with edit denied but view allowed.
  • Request access form with optional reason and requested permission level.
  • Request sent or pending state naming the owner or safe recipient.
  • Request declined state with safe next steps.
  • Approved state that lets users retry or open the resource.
  • Wrong-account state with switch-account path.
  • Owner unavailable or policy-blocked state.
  • No-disclosure state that avoids leaking restricted object details.

Interaction Contract

  • The denial is durable until the permission, account, role, policy, or request state changes.
  • Request access records the requested role, reason, requester account, target object or action, owner destination, and timestamp when policy allows.
  • Switch account returns to the intended resource after authentication when possible.
  • Read-only fallback preserves allowed viewing and safe navigation while blocking only restricted actions.
  • Owner-assisted paths identify a safe contact, team, admin group, or support route instead of exposing private collaborator lists.
  • No-disclosure variants use neutral navigation and support paths without confirming whether the private resource exists.

Implementation Checklist

  • Model authorization denial separately from not found, unauthenticated, rate limit, network failure, validation failure, and empty result states.
  • Capture denial reason codes that map to safe user copy, requestability, current account, current role, required role, owner visibility, and no-disclosure policy.
  • Implement request access flows with submission status, owner routing, approval or decline outcomes, expiry, and duplicate request handling.
  • Preserve allowed read-only content and navigation when only a specific action is denied.
  • Instrument support-safe diagnostics such as request ID, policy name, account, and timestamp without exposing restricted object data.
  • Test wrong account, missing role, revoked share, expired link, pending request, declined request, policy block, owner unavailable, private-object no-disclosure, and screen reader recovery.

Common Generated-UI Mistakes

  • Treating authorization denial as a generic retryable error.
  • Showing an empty state for a known restricted object without any request or account path.
  • Disabling controls without explaining missing access.
  • Leaking private object titles, owners, counts, comments, or paths in a denial page.
  • Claiming request success before an owner approves access.
  • Blocking read-only work when only edit, publish, or admin action is restricted.

Critique Questions

  • Can the user tell whether this is missing access, wrong account, policy, or system failure?
  • What object or action is safe to name, and what must stay hidden?
  • Which current account, role, team, or share grant is being evaluated?
  • What role or permission is required for the blocked action?
  • Who can grant access, and is that owner path safe to reveal?
  • What can the user still do while access is pending or denied?
Accessibility
  • Use a heading that identifies the access boundary and a text description that does not rely on lock icons or red color alone.
  • Move focus to the permission message when it replaces page content or blocks a workflow.
  • Associate action-level permission messages with the affected control using visible text and accessible descriptions.
  • Announce request sent, pending, approved, and declined changes through a polite status region.
  • Keep request, switch account, contact owner, read-only view, and safe navigation controls reachable by keyboard.
  • For no-disclosure states, make the neutral page understandable without exposing restricted object data in accessible names.
Keyboard Behavior
  • Focus lands on the access-denied heading or first safe recovery action when the state opens.
  • Tab order moves from explanation to request access, switch account, read-only view, owner contact, and safe exit actions.
  • Request access forms keep labels, reason fields, permission selectors, submit, cancel, and status messages in logical order.
  • After submitting a request, focus moves to the pending status and the next safe action.
  • If access is approved after refresh, focus returns to the formerly blocked object or action.
  • Disabled restricted actions are not the only path; an enabled control or message explains the missing permission.
Variants
  • Whole-page access denied
  • Action-level access denied
  • Read-only with edit denied
  • Request access
  • Pending access request
  • Access declined
  • Access approved retry
  • Wrong account
  • Owner unavailable
  • Organization policy block
  • No-disclosure denial

Verification

Source trail checked:

Saved items