228 lines
12 KiB
HTML
228 lines
12 KiB
HTML
{% extends 'base.html' %}
|
|
{% load humanize %}
|
|
|
|
{% block title %}{{ user_obj.username }} - Benutzerverwaltung - van Hees-Theyssen-Vogel'sche Stiftung{% endblock %}
|
|
|
|
{% block content %}
|
|
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="d-sm-flex align-items-center justify-content-between mb-4">
|
|
<h1 class="h3 mb-0 text-gray-800">
|
|
<i class="fas fa-user me-2"></i>{{ user_obj.username }}
|
|
{% if user_obj.is_superuser %}
|
|
<span class="badge bg-danger ms-2">Superuser</span>
|
|
{% endif %}
|
|
{% if user_obj.is_staff %}
|
|
<span class="badge bg-warning ms-2">Staff</span>
|
|
{% endif %}
|
|
{% if not user_obj.is_active %}
|
|
<span class="badge bg-danger ms-2">Inaktiv</span>
|
|
{% endif %}
|
|
</h1>
|
|
<div>
|
|
<a href="{% url 'stiftung:user_edit' user_obj.pk %}" class="btn btn-primary">
|
|
<i class="fas fa-edit me-1"></i>Bearbeiten
|
|
</a>
|
|
<a href="{% url 'stiftung:user_management' %}" class="btn btn-outline-secondary">
|
|
<i class="fas fa-arrow-left me-1"></i>Zurück zur Übersicht
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<!-- Benutzerinformationen -->
|
|
<div class="col-lg-8">
|
|
<div class="card shadow mb-4">
|
|
<div class="card-header py-3">
|
|
<h6 class="m-0 font-weight-bold text-primary">
|
|
<i class="fas fa-info-circle me-2"></i>Benutzerinformationen
|
|
</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<table class="table table-borderless">
|
|
<tr>
|
|
<td class="fw-bold">Benutzername:</td>
|
|
<td>{{ user_obj.username }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">E-Mail:</td>
|
|
<td>
|
|
{% if user_obj.email %}
|
|
<a href="mailto:{{ user_obj.email }}">{{ user_obj.email }}</a>
|
|
{% else %}
|
|
<span class="text-muted">Keine E-Mail angegeben</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">Vollständiger Name:</td>
|
|
<td>
|
|
{% if user_obj.first_name or user_obj.last_name %}
|
|
{{ user_obj.first_name }} {{ user_obj.last_name }}
|
|
{% else %}
|
|
<span class="text-muted">Kein Name angegeben</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<table class="table table-borderless">
|
|
<tr>
|
|
<td class="fw-bold">Status:</td>
|
|
<td>
|
|
{% if user_obj.is_active %}
|
|
<span class="badge bg-success">Aktiv</span>
|
|
{% else %}
|
|
<span class="badge bg-danger">Inaktiv</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">Letzte Anmeldung:</td>
|
|
<td>
|
|
{% if user_obj.last_login %}
|
|
{{ user_obj.last_login|date:"d.m.Y H:i" }}
|
|
<br><small class="text-muted">{{ user_obj.last_login|naturaltime }}</small>
|
|
{% else %}
|
|
<span class="text-muted">Nie angemeldet</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">Mitglied seit:</td>
|
|
<td>
|
|
{{ user_obj.date_joined|date:"d.m.Y H:i" }}
|
|
<br><small class="text-muted">{{ user_obj.date_joined|naturaltime }}</small>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Berechtigungen -->
|
|
<div class="card shadow mb-4">
|
|
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
|
<h6 class="m-0 font-weight-bold text-primary">
|
|
<i class="fas fa-shield-alt me-2"></i>Berechtigungen
|
|
{% if stiftung_permissions %}
|
|
<span class="badge bg-primary ms-2">{{ stiftung_permissions|length }}</span>
|
|
{% endif %}
|
|
</h6>
|
|
<a href="{% url 'stiftung:user_permissions' user_obj.pk %}" class="btn btn-outline-primary btn-sm">
|
|
<i class="fas fa-edit me-1"></i>Berechtigungen verwalten
|
|
</a>
|
|
</div>
|
|
<div class="card-body">
|
|
{% if stiftung_permissions %}
|
|
<div class="row">
|
|
{% for permission in stiftung_permissions %}
|
|
<div class="col-md-6 mb-2">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fas fa-check-circle text-success me-2"></i>
|
|
<span>{{ permission|slice:"9:" }}</span>
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<div class="text-center py-4">
|
|
<i class="fas fa-shield-alt fa-3x text-muted mb-3"></i>
|
|
<h5 class="text-muted">Keine Berechtigungen zugewiesen</h5>
|
|
<p class="text-muted">Diesem Benutzer wurden noch keine Berechtigungen zugewiesen.</p>
|
|
<a href="{% url 'stiftung:user_permissions' user_obj.pk %}" class="btn btn-primary">
|
|
<i class="fas fa-plus me-1"></i>Berechtigungen zuweisen
|
|
</a>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Aktivitätsverlauf -->
|
|
<div class="card shadow">
|
|
<div class="card-header py-3">
|
|
<h6 class="m-0 font-weight-bold text-primary">
|
|
<i class="fas fa-history me-2"></i>Letzte Aktivitäten
|
|
{% if recent_activity %}
|
|
<span class="badge bg-primary ms-2">{{ recent_activity|length }}</span>
|
|
{% endif %}
|
|
</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
{% if recent_activity %}
|
|
<div class="timeline">
|
|
{% for activity in recent_activity %}
|
|
<div class="d-flex mb-3">
|
|
<div class="flex-shrink-0">
|
|
<div class="bg-{% if activity.action == 'create' %}success{% elif activity.action == 'update' %}warning{% elif activity.action == 'delete' %}danger{% elif activity.action == 'login' %}info{% else %}secondary{% endif %} rounded-circle d-flex align-items-center justify-content-center" style="width: 40px; height: 40px;">
|
|
<i class="fas fa-{% if activity.action == 'create' %}plus{% elif activity.action == 'update' %}edit{% elif activity.action == 'delete' %}trash{% elif activity.action == 'login' %}sign-in-alt{% elif activity.action == 'logout' %}sign-out-alt{% else %}circle{% endif %} text-white"></i>
|
|
</div>
|
|
</div>
|
|
<div class="flex-grow-1 ms-3">
|
|
<div class="fw-bold">{{ activity.get_action_display }}</div>
|
|
<div class="text-muted small">{{ activity.description }}</div>
|
|
<div class="text-muted small">
|
|
<i class="fas fa-clock me-1"></i>{{ activity.timestamp|naturaltime }}
|
|
{% if activity.ip_address %}
|
|
• <i class="fas fa-map-marker-alt me-1"></i>{{ activity.ip_address }}
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<div class="text-center py-4">
|
|
<i class="fas fa-history fa-3x text-muted mb-3"></i>
|
|
<h5 class="text-muted">Keine Aktivitäten</h5>
|
|
<p class="text-muted">Für diesen Benutzer sind noch keine Aktivitäten aufgezeichnet.</p>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Aktionen -->
|
|
<div class="col-lg-4">
|
|
<div class="card shadow">
|
|
<div class="card-header py-3">
|
|
<h6 class="m-0 font-weight-bold text-primary">
|
|
<i class="fas fa-tools me-2"></i>Aktionen
|
|
</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="d-grid gap-2">
|
|
<a href="{% url 'stiftung:user_edit' user_obj.pk %}" class="btn btn-outline-primary">
|
|
<i class="fas fa-edit me-2"></i>Benutzer bearbeiten
|
|
</a>
|
|
<a href="{% url 'stiftung:user_change_password' user_obj.pk %}" class="btn btn-outline-warning">
|
|
<i class="fas fa-key me-2"></i>Passwort ändern
|
|
</a>
|
|
<a href="{% url 'stiftung:user_permissions' user_obj.pk %}" class="btn btn-outline-info">
|
|
<i class="fas fa-shield-alt me-2"></i>Berechtigungen verwalten
|
|
</a>
|
|
<hr>
|
|
{% if user_obj != request.user %}
|
|
<a href="{% url 'stiftung:user_delete' user_obj.pk %}" class="btn btn-outline-danger" onclick="return confirm('Sind Sie sicher, dass Sie diesen Benutzer löschen möchten?')">
|
|
<i class="fas fa-trash me-2"></i>Benutzer löschen
|
|
</a>
|
|
{% else %}
|
|
<button class="btn btn-outline-danger" disabled title="Sie können sich nicht selbst löschen">
|
|
<i class="fas fa-trash me-2"></i>Benutzer löschen
|
|
</button>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{% endblock %}
|