From 08971abc2861e83258dc80347c71e2936d59dc01 Mon Sep 17 00:00:00 2001 From: Md Bayazid Bostame Date: Thu, 26 Mar 2026 10:49:59 +0100 Subject: [PATCH] snapshot: preserve current tubco portal baseline --- .../templates/workflows/user_management.html | 45 +++++++++++++++++++ backend/workflows/views.py | 10 +++++ 2 files changed, 55 insertions(+) diff --git a/backend/workflows/templates/workflows/user_management.html b/backend/workflows/templates/workflows/user_management.html index 9067263..f74769f 100644 --- a/backend/workflows/templates/workflows/user_management.html +++ b/backend/workflows/templates/workflows/user_management.html @@ -139,4 +139,49 @@

{% trans "Hinweis: Der aktuell angemeldete Super Admin kann sich hier nicht selbst deaktivieren oder auf eine niedrigere Rolle setzen." %}

+ +
+
+
+

{% trans "Letzte Benutzeraktionen" %}

+

{% trans "Die letzten Änderungen an Benutzerkonten und Rollen." %}

+
+ {% trans "Zum Audit Log" %} +
+
+ + + + + + + + + + + + {% for row in recent_user_events %} + + + + + + + + {% empty %} + + + + {% endfor %} + +
{% trans "Zeit" %}{% trans "Aktion" %}{% trans "Betroffen" %}{% trans "Durch" %}{% trans "Details" %}
{{ row.created_at|date:"d.m.Y H:i" }}{{ row.action_label }}{{ row.target_label|default:"-" }}{{ row.actor_display|default:"-" }} + {% if row.details.username %}
{% trans "Benutzername" %}: {{ row.details.username }}
{% endif %} + {% if row.role_label %}
{% trans "Rolle" %}: {{ row.role_label }}
{% endif %} + {% if row.details.email %}
{% trans "E-Mail" %}: {{ row.details.email }}
{% endif %} + {% if row.details.invitation_sent %}
{% trans "Einladung versendet" %}
{% endif %} + {% if row.details.password_changed %}
{% trans "Passwort geändert" %}
{% endif %} + {% if not row.details %}-{% endif %} +
{% trans "Noch keine Benutzeraktionen vorhanden." %}
+
+
{% endblock %} diff --git a/backend/workflows/views.py b/backend/workflows/views.py index 5bd956f..7e97f97 100644 --- a/backend/workflows/views.py +++ b/backend/workflows/views.py @@ -363,6 +363,15 @@ def _user_management_rows(): def _render_user_management(request, create_form=None, status_code: int = 200): + recent_user_events = list( + AdminAuditLog.objects.select_related('actor') + .filter(action__in=['user_created', 'user_updated', 'user_password_reset_sent', 'user_deleted']) + .order_by('-created_at', '-id')[:12] + ) + for row in recent_user_events: + row.action_label = _audit_action_label(row.action) + role_key = (row.details or {}).get('role') + row.role_label = str(ROLE_LABELS[role_key]) if role_key in ROLE_LABELS else role_key return render( request, 'workflows/user_management.html', @@ -370,6 +379,7 @@ def _render_user_management(request, create_form=None, status_code: int = 200): 'create_form': create_form or UserManagementCreateForm(), 'rows': _user_management_rows(), 'role_choices': [(key, str(ROLE_LABELS[key])) for key in ROLE_GROUP_NAMES], + 'recent_user_events': recent_user_events, }, status=status_code, )