modified: web/blueprints/site_admin.py
modified: web/templates/admin/dashboard.html modified: web/templates/admin/groups.html modified: web/templates/admin/users.html
This commit is contained in:
@@ -25,14 +25,20 @@ def admin_required(f):
|
|||||||
@site_admin.route("/")
|
@site_admin.route("/")
|
||||||
@admin_required
|
@admin_required
|
||||||
def dashboard():
|
def dashboard():
|
||||||
groups = db.list_all_groups()
|
try:
|
||||||
users = db.list_all_users()
|
groups = db.list_all_groups() or []
|
||||||
for g in groups:
|
users = db.list_all_users() or []
|
||||||
g["has_db"] = db.has_db_configured(g["id"])
|
for g in groups:
|
||||||
|
try:
|
||||||
|
g["has_db"] = db.has_db_configured(g["id"])
|
||||||
|
except Exception:
|
||||||
|
g["has_db"] = False
|
||||||
|
except Exception:
|
||||||
|
groups, users = [], []
|
||||||
stats = {
|
stats = {
|
||||||
"group_count": len(groups),
|
"group_count": len(groups),
|
||||||
"user_count": len(users),
|
"user_count": len(users),
|
||||||
"db_configured": sum(1 for g in groups if g["has_db"]),
|
"db_configured": sum(1 for g in groups if g.get("has_db")),
|
||||||
"admin_count": sum(1 for u in users if u.get("is_site_admin")),
|
"admin_count": sum(1 for u in users if u.get("is_site_admin")),
|
||||||
}
|
}
|
||||||
return render_template("admin/dashboard.html", groups=groups, users=users, stats=stats)
|
return render_template("admin/dashboard.html", groups=groups, users=users, stats=stats)
|
||||||
@@ -126,6 +132,19 @@ def group_member_remove(group_id, user_id):
|
|||||||
return redirect(url_for("site_admin.group_members", group_id=group_id))
|
return redirect(url_for("site_admin.group_members", group_id=group_id))
|
||||||
|
|
||||||
|
|
||||||
|
@site_admin.route("/groups/<int:group_id>/members/<int:user_id>/toggle-role", methods=["POST"])
|
||||||
|
@admin_required
|
||||||
|
def group_member_toggle_role(group_id, user_id):
|
||||||
|
member = db.get_group_member(user_id, group_id)
|
||||||
|
if member:
|
||||||
|
import json as _json
|
||||||
|
new_role = "member" if member["role"] == "admin" else "admin"
|
||||||
|
perms = member["permissions"] if isinstance(member["permissions"], dict) else (_json.loads(member["permissions"]) if member["permissions"] else {})
|
||||||
|
db.update_member(user_id, group_id, new_role, perms)
|
||||||
|
flash(f"Rolle auf '{new_role}' geändert.", "success")
|
||||||
|
return redirect(url_for("site_admin.group_members", group_id=group_id))
|
||||||
|
|
||||||
|
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
# Nutzer verwalten
|
# Nutzer verwalten
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
<div class="card border-secondary">
|
<div class="card border-secondary">
|
||||||
<div class="card-header d-flex justify-content-between align-items-center">
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
<span><i class="bi bi-collection-fill me-2"></i>Gruppen</span>
|
<span><i class="bi bi-collection-fill me-2"></i>Gruppen</span>
|
||||||
<a href="{{ url_for('site_admin.group_create') }}" class="btn btn-sm btn-success">
|
<a href="{{ url_for('site_admin.group_new') }}" class="btn btn-sm btn-success">
|
||||||
<i class="bi bi-plus-lg"></i> Neu
|
<i class="bi bi-plus-lg"></i> Neu
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
<div class="card border-secondary">
|
<div class="card border-secondary">
|
||||||
<div class="card-header d-flex justify-content-between align-items-center">
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
<span><i class="bi bi-people-fill me-2"></i>Benutzer</span>
|
<span><i class="bi bi-people-fill me-2"></i>Benutzer</span>
|
||||||
<a href="{{ url_for('site_admin.user_create') }}" class="btn btn-sm btn-success">
|
<a href="{{ url_for('site_admin.user_new') }}" class="btn btn-sm btn-success">
|
||||||
<i class="bi bi-plus-lg"></i> Neu
|
<i class="bi bi-plus-lg"></i> Neu
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
<h2><i class="bi bi-collection-fill me-2"></i>Gruppen</h2>
|
<h2><i class="bi bi-collection-fill me-2"></i>Gruppen</h2>
|
||||||
<a href="{{ url_for('site_admin.group_create') }}" class="btn btn-success">
|
<a href="{{ url_for('site_admin.group_new') }}" class="btn btn-success">
|
||||||
<i class="bi bi-plus-lg me-1"></i>Neue Gruppe
|
<i class="bi bi-plus-lg me-1"></i>Neue Gruppe
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
<h2><i class="bi bi-people-fill me-2"></i>Benutzer</h2>
|
<h2><i class="bi bi-people-fill me-2"></i>Benutzer</h2>
|
||||||
<a href="{{ url_for('site_admin.user_create') }}" class="btn btn-success">
|
<a href="{{ url_for('site_admin.user_new') }}" class="btn btn-success">
|
||||||
<i class="bi bi-person-plus-fill me-1"></i>Neuer Benutzer
|
<i class="bi bi-person-plus-fill me-1"></i>Neuer Benutzer
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user