{% extends "layouts/app_shell.html" %} {# In-app 403 — renders inside the authenticated shell so the user keeps their sidebar, persona badge, and logout context. Shipped as part of the #776 fix (cycle 219). #} {% block title %}Access Denied - {{ app_name | default("Dazzle") }}{% endblock %} {% block content %}

403

{{ message | default("You don't have permission to access this page.") }}

{# Role-disclosure panel — #808. Rendered when the raise site emitted a structured detail dict (_forbidden_detail). Tells the user which personas are permitted and which they actually have, so the page is a signpost rather than a dead-end. #} {% if forbidden_detail %}
{% if forbidden_detail.entity %}
Entity:
{{ forbidden_detail.entity }}
{% endif %} {% if forbidden_detail.operation %}
Operation:
{{ forbidden_detail.operation }}
{% endif %} {% if forbidden_detail.permitted_personas %}
Allowed for:
{% for p in forbidden_detail.permitted_personas %} {{ p }} {% endfor %}
{% endif %} {% if forbidden_detail.current_roles %}
Your roles:
{% for r in forbidden_detail.current_roles %} {{ r }} {% else %} (none) {% endfor %}
{% endif %}
{% endif %}
{% if back_url %} {{ back_label | default("Back") }} {% endif %} Go to Dashboard
{% endblock %}