{% extends "layout.twig" %} {% set errorMessages = { 'self_demote': 'You cannot demote yourself — ask another admin.', 'last_admin': 'Cannot demote the last remaining admin.', 'self_tombstone': 'You cannot tombstone yourself — ask another admin.', 'bad_action': 'Unrecognised action.', 'not_found': 'User not found.', 'db_error': 'Could not save. Try again.', } %} {% set flashMessages = { 'promoted': 'Admin granted.', 'demoted': 'Admin revoked.', 'tombstoned': 'User marked as former — name and email are now hidden in the UI. Audit trail keeps the original values.', 'restored': 'User restored.', 'noop': 'Nothing changed.', } %} {% block content %}

Users

Everyone who has ever signed in. Toggle admin status here; you cannot demote yourself or the last admin. Users are never deleted — to honour a privacy / right-to-be-forgotten request, mark a user as former: the live UI hides their name and email (the audit log keeps the original values verbatim).

{% if error and errorMessages[error] is defined %}
{{ errorMessages[error] }}
{% endif %} {% if flash and flashMessages[flash] is defined %}
{{ flashMessages[flash] }}
{% endif %}
{% if users is empty %}
No users yet.
{% else %} {% for u in users %} {% set isSelf = u.id == currentUser.id %} {% set isTombstoned = u.isTombstoned %} {% if isTombstoned %} {% else %} {% if not isSelf %} {% endif %} {% endif %} {% endfor %}
Email Display name Last login (UTC) Admin  
{{ u.publicEmail }} former {{ u.publicDisplayName }} {% if u.lastLoginAt is not null %}{{ u.lastLoginAt }}{% else %}{% endif %}
{{ u.email }} {% if isSelf %} you {% endif %} {{ u.displayName }} {% if u.lastLoginAt is not null %}{{ u.lastLoginAt }}{% else %}{% endif %}
{% endif %}
{% endblock %}