Zugangsdaten-Entitaet, Gruppen-Tabelle mit Aufklappansicht, Vor-/Nachname, Dashboard-Sektionen

- Zugangsdaten (SSH-Logins) als eigenstaendige, wiederverwendbare Entitaet
  statt direkt am Switch; inline Neuanlage beim Switch-Erstellen moeglich;
  automatische Migration bestehender Switch-Logins
- Gruppen-Seite als Tabelle mit Aufklapp-Zeile fuer Rechte (Akkordeon),
  Admin als feste Systemzeile (Mitgliederverwaltung ueber is_admin),
  Standardgruppe 'Benutzer' mit allen Ansichtsrechten (devices.view,
  switches.view), automatische Zuordnung neuer/verwaister Benutzer
- Users-Seite: Icon-Buttons statt Text, Bearbeiten+Passwortaenderung in
  einem Modal zusammengefuehrt, Gruppe/Admin-Zuweisung ueber eigenen
  Zuweisen-Button (wie Switch-Zuordnung bei Devices), Vor-/Nachname
- Dashboard: einheitliche Kachelansicht mit/ohne Login, drei sortierte
  Abschnitte (Offline/Online/Deaktiviert), Kachel-Suchfilter, Bootstrap-
  artiges Grid (max. 6 Spalten), Aktivieren-Option im Popup fuer
  deaktivierte Geraete, Countdown serverseitig korrekt geseedet
- Sidebar dauerhaft einklappbar (Desktop, persistent via localStorage)
- Devices-Tabelle: Aktions-Buttons nebeneinander statt untereinander

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-10 13:30:47 +02:00
co-authored by Claude Sonnet 5
parent 08d8d1f738
commit fa6bb2935f
12 changed files with 1108 additions and 345 deletions
+77 -36
View File
@@ -10,20 +10,33 @@ Linux-VM). Entwickelt wird unter WSL2 (Ubuntu) unter Windows — siehe
Die App ermöglicht:
- **Öffentliches Kurz-Dashboard ohne Login** (Hostname, IP, Status, letzte
Prüfung) — für den schnellen Blick auf dem Flur-Monitor; volle Verwaltung
und PoE-Neustart bleiben hinter dem Login
- Verwaltung von Devices und Switches (inkl. verschlüsselter SSH-Zugangsdaten)
- **Öffentliches Kachel-Dashboard ohne Login** — zeigt nur aktive (nicht
deaktivierte) Geräte, nur Online/Offline/Gesamt-Statistik; volle Verwaltung,
Aktivieren/Deaktivieren und PoE-Neustart bleiben hinter dem Login. Eingeloggt
sind zusätzlich deaktivierte Geräte sichtbar (eigene Kachel-Sektion). Alle
Kacheln sind durchsuchbar und in drei Abschnitten sortiert: Offline, Online,
Deaktiviert — jeweils alphabetisch
- Verwaltung von Devices und Switches
- **Zugangsdaten als eigene, wiederverwendbare Entität**: SSH-Logins werden
einmal angelegt und können mehreren Switchen zugeordnet werden; beim
Anlegen eines Switches lassen sich bestehende Zugangsdaten auswählen oder
direkt neue hinterlegen, ohne vorher zu „Zugangsdaten“ wechseln zu müssen
- **Browser-SSH-Terminal beim Anlegen/Bearbeiten eines Switches**, um den
Host-Key zu bestätigen und die Zugangsdaten direkt zu prüfen, bevor der
Switch gespeichert wird — funktioniert auf jedem Betriebssystem, die
SSH-Verbindung wird dabei immer vom PoE-Server aus aufgebaut
- Manueller PoE-Neustart einzelner Geräte per Klick
- Einstellbares Prüfintervall (steuert den Hintergrund-Check-Dienst)
- Manueller PoE-Neustart einzelner Geräte per Klick; bei deaktivierten
Geräten bietet das Detail-Popup stattdessen direkt eine Aktivieren-Option
- Einstellbares Prüfintervall (steuert den Hintergrund-Check-Dienst) —
der Countdown „Nächste Prüfung“ wird aus dem tatsächlichen letzten
Log-Eintrag berechnet, nicht bei jedem Seitenaufruf neu gestartet
- Live-Log-Ansicht mit farblicher Hervorhebung (online/offline)
- **Rechtesystem mit Gruppen**: Admins dürfen immer alles; normalen
Benutzern lassen sich über Gruppen einzelne Verwaltungsrechte gezielt
zuweisen (siehe [Rechtesystem](#rechtesystem-gruppen--berechtigungen))
- **Rechtesystem mit Gruppen**: Admins dürfen immer alles (als Gruppe „Admin“
überall mit aufgeführt); normalen Benutzern lassen sich über Gruppen
einzelne Verwaltungsrechte gezielt zuweisen, inkl. reiner Ansichtsrechte
(siehe [Rechtesystem](#rechtesystem-gruppen--berechtigungen))
- Einklappbare Sidebar (Desktop: dauerhaft, über Neuladen hinweg gemerkt;
mobil: temporäres Überlagern)
## Was ist neu gegenüber dem Original?
@@ -61,39 +74,67 @@ Die App ermöglicht:
## Rechtesystem (Gruppen & Berechtigungen)
Admins (`is_admin=1`) dürfen wie bisher alles, inklusive Benutzer-/Gruppen-/
Admins dürfen wie bisher alles, inklusive Benutzer-/Gruppen-/
Settingsverwaltung — das bleibt exklusiv Admins vorbehalten. Zusätzlich gibt
es jetzt **Gruppen**: eine Gruppe bündelt einzelne Verwaltungsrechte, die
dann normalen Benutzern zugewiesen werden können, ohne sie zu Admins zu
machen. Ein Benutzer kann mehreren Gruppen angehören — die Rechte addieren
sich (Vereinigung, nicht Schnittmenge).
es **Gruppen**: eine Gruppe bündelt einzelne Verwaltungsrechte, die dann
normalen Benutzern zugewiesen werden können, ohne sie zu Admins zu machen.
Ein Benutzer kann nur einer Gruppe/Rolle gleichzeitig zugeordnet sein
(über den Button „Gruppe zuweisen“, analog zur Switch-Zuordnung bei
Devices) — technisch sind mehrere Gruppen pro Benutzer möglich (Rechte
würden sich addieren), die UI bildet aber bewusst nur eine 1:1-Zuordnung ab.
Auf der **Gruppen**-Seite (nur für Admins) werden zur Übersicht immer auch
die beiden Systemrollen mit aufgeführt:
- **Admin** — eine feste, nicht editierbare Zeile mit allen Rechten;
Mitgliedschaft wird direkt hier verwaltet (Button „Mitglieder verwalten“),
intern über den `is_admin`-Schalter der Benutzer. Mindestens ein Admin
muss immer bestehen bleiben (serverseitig erzwungen).
- **Benutzer** — die **Standardgruppe**, mit der alle Ansichtsrechte
(`devices.view`, `switches.view`) vorbelegt sind. Jeder neu angelegte,
nicht-admin Benutzer wird ihr automatisch zugeordnet; sie kann nicht
gelöscht werden.
Jede Gruppe lässt sich über „Rechte anzeigen/bearbeiten“ aufklappen (wie ein
Akkordeon) und zeigt dort die volle Checkbox-Liste; Mitglieder werden über
einen eigenen Button/Modal verwaltet (nur die Anzahl steht in der Tabelle).
Verfügbare Rechte:
| Bereich | Recht | Bedeutung |
|----------|---------------------|---------------------------------------------|
| Devices | `devices.toggle` | Geräte aktivieren/deaktivieren |
| Devices | `devices.create` | Geräte anlegen |
| Devices | `devices.edit` | Geräte bearbeiten (inkl. Switch-Zuordnung) |
| Devices | `devices.delete` | Geräte löschen |
| Devices | `devices.restart` | PoE-Neustart über das Dashboard |
| Switches | `switches.create` | Switche anlegen |
| Switches | `switches.edit` | Switche bearbeiten |
| Switches | `switches.delete` | Switche löschen |
| Bereich | Recht | Bedeutung |
|----------|---------------------|-----------------------------------------------|
| Devices | `devices.view` | Devices-Seite ansehen |
| Devices | `devices.toggle` | Geräte aktivieren/deaktivieren |
| Devices | `devices.create` | Geräte anlegen |
| Devices | `devices.edit` | Geräte bearbeiten (inkl. Switch-Zuordnung) |
| Devices | `devices.delete` | Geräte löschen |
| Devices | `devices.restart` | PoE-Neustart/Aktivieren über das Dashboard |
| Switches | `switches.view` | Switches- und Zugangsdaten-Seite ansehen |
| Switches | `switches.create` | Switche und Zugangsdaten anlegen |
| Switches | `switches.edit` | Switche und Zugangsdaten bearbeiten |
| Switches | `switches.delete` | Switche und Zugangsdaten löschen |
Verwaltet werden Gruppen unter **Gruppen** (nur für Admins sichtbar/nutzbar):
Name vergeben, Rechte per Checkbox zuweisen, Mitglieder auswählen. Die
Devices-Seite bleibt für alle eingeloggten Benutzer les- und durchsuchbar;
nur die tatsächlichen Aktionen (Buttons, Toggle-Switches, Formulare) sind an
das jeweilige Recht gekoppelt — sowohl im Frontend (ausgeblendet) als auch
im Backend (serverseitig durchgesetzt, unabhängig vom Frontend). Die
Switches-Seite ist komplett unsichtbar/gesperrt für Benutzer ohne mindestens
ein `switches.*`-Recht.
Sowohl das Anzeigen der Devices-/Switches-Seiten als auch jede einzelne
Aktion (Buttons, Toggle-Switches, Formulare) ist an das jeweilige Recht
gekoppelt — im Frontend ausgeblendet **und** im Backend serverseitig
durchgesetzt, unabhängig vom Frontend.
Datenmodell: `groups`, `group_permissions` (Gruppe → Recht), `user_groups`
(Benutzer → Gruppe). Bestehende Datenbanken werden beim App-Start automatisch
um diese Tabellen ergänzt (`_ensure_schema()` in `app.py`), ein manuelles
Migrations-Skript ist nicht nötig.
Datenmodell: `groups` (inkl. `is_default`-Flag), `group_permissions`
(Gruppe → Recht), `user_groups` (Benutzer → Gruppe). Bestehende Datenbanken
werden beim App-Start automatisch migriert (`_ensure_schema()` in `app.py`,
inkl. Nachrüsten der Standardgruppe und Zuordnung bestehender Benutzer ohne
Gruppe) — kein manuelles Migrations-Skript nötig.
## Zugangsdaten (wiederverwendbare SSH-Logins)
Switch-Zugangsdaten (Username + verschlüsseltes Passwort) sind eine eigene
Entität (`credentials`-Tabelle) statt direkt am Switch zu hängen — mehrere
Switche mit demselben Login teilen sich einen Eintrag. Beim Anlegen/Bearbeiten
eines Switches lässt sich per Dropdown ein bestehender Eintrag auswählen oder
über „+ Neue Zugangsdaten anlegen“ direkt im selben Formular ein neuer
anlegen, ohne vorher zur eigenen **Zugangsdaten**-Seite wechseln zu müssen.
Löschen ist nur möglich, wenn kein Switch mehr auf den Eintrag verweist.
Bestehende Datenbanken aus einer älteren Version (Username/Passwort direkt
am Switch) werden beim ersten Start automatisch migriert.
## Entwicklung unter WSL