Rollen Chunk 8: README mit Rollen, Workflow und Konto
Docker Image / test (push) Successful in 1m44s
Docker Image / image (push) Successful in 33s

This commit is contained in:
loki committed 2026-10-11 20:42:07 +02:00
1 parent 4d0c7527ea
commit 8e41b9189e
1 file changed
+20 -5
+20 -5
View File
@@ -141,7 +141,7 @@ Danach Änderungen committen und nach Gitea pushen. Die Action baut ein aktualis
## Datensicherung und Wiederherstellung
Die App erstellt wöchentlich automatisch eine konsistente SQLite-Sicherung und behält höchstens fünf Dateien in `./backups`. In **Einstellungen → Sicherung** kann zusätzlich jederzeit eine Sicherung manuell erstellt und der Sicherungsstand kontrolliert werden. Nicht mehr benötigte Sicherungen lassen sich dort nach einer Bestätigung einzeln löschen.
Die App erstellt wöchentlich automatisch eine konsistente SQLite-Sicherung und behält höchstens fünf Dateien in `./backups`. In **Einstellungen → Sicherung** kann zusätzlich jederzeit eine Sicherung manuell erstellt und der Sicherungsstand kontrolliert werden. Nicht mehr benötigte Sicherungen lassen sich dort nach einer Bestätigung einzeln löschen. Bei aktiver Anmeldung ist der Bereich nur für Administratoren sichtbar.
### Sicherung zurückspielen
@@ -195,15 +195,30 @@ Standardmäßig ist die Anmeldung ausgeschaltet und die App verhält sich wie bi
2. Dienst neu starten (`docker compose up -d` bzw. `docker compose -f compose.dev.yaml up -d`).
3. **Erste Anmeldung** (`password`): Die leere Datenbank verlangt beim ersten Aufruf „Erste Anmeldung" – Name, E-Mail und Passwort anlegen. Danach ist die Registrierung geschlossen; es bleibt bei diesem einen Benutzer.
3. **Erste Anmeldung** (`password`): Die leere Datenbank verlangt beim ersten Aufruf „Erste Anmeldung" – Name, E-Mail und Passwort anlegen. Das erste Konto wird **Admin** und erbt ggf. vorhandene Daten aus der Zeit ohne Anmeldung. Weitere Konten legt danach nur ein Admin an (Einstellungen → Benutzer).
4. **SSO** (`sso`): Auf der Anmeldeseite erscheint „Mit SSO anmelden". Die App leitet zum OIDC-Anbieter weiter und legt beim ersten Login das Benutzerkonto automatisch an.
4. **SSO** (`sso`): Auf der Anmeldeseite erscheint „Mit SSO anmelden". Die App leitet zum OIDC-Anbieter weiter und legt beim ersten Login das Benutzerkonto automatisch an (das erste Konto wird Admin).
### Rollen und Rechte
| Rolle | Darf |
| --- | --- |
| `benutzer` | Eigene Daten lesen und buchen (Zeiterfassung, Urlaub als **Anfrage**, Krankmeldung), eigene Einstellungen und eigenes Konto (Passwort, E-Mail) pflegen. |
| `teamleiter` | Alles von `benutzer`, zusätzlich fremde Einstellungen lesen/ändern sowie der **Team-Tab**: Matrix-Kalender aller Benutzer mit Resturlaub, Anfragen genehmigen/ablehnen. |
| `admin` | Alles von `teamleiter`, zusätzlich **Benutzerverwaltung** (anlegen, Rolle wechseln, löschen) und **Sicherung**. |
### Genehmigungs-Workflow
1. Normale Benutzer planen Urlaub als **Anfrage** (`beantragt`): Badge in den Buchungen, gestrichelte Kalendertage, eigene Sammelzeile im Team-Tab – zählt noch **nicht** in den Resturlaub, blockiert aber dieselben Tage für eigene weitere Anfragen.
2. Teamleiter/Admins sehen offene Anfragen oben im Team-Tab und **genehmigen** oder **lehnen ab**. Genehmigen prüft den Anspruch frisch (422, falls inzwischen überzogen).
3. **Bestätigt** zählt in den Saldo (Papierkorb bei Storno wie bisher); **abgelehnt** bleibt mit Badge sichtbar und ist löschbar. Eigene Anfragen lassen sich jederzeit spurlos stornieren.
Hinweise:
- HTTP im Heimnetz genügt; sichere Cookies sind bewusst nicht erzwungen (`useSecureCookies` aus). Trotzdem gilt: kein Internet-Expose, LAN-Begrenzung bleibt.
- Abmelden steht im Kopf neben dem Theme-Schalter. Eine abgelaufene Sitzung führt zurück zur Anmeldung statt zur Fehlerwand.
- Sitzungs-, Benutzer- und Kontodaten liegen als Tabellen `session`, `user`, `account`, `verification` in derselben `app.sqlite3` und werden mitgesichert.
- Abmelde-Icon steht im Kopf neben dem Theme-Schalter. Eine abgelaufene Sitzung führt zurück zur Anmeldung statt zur Fehlerwand.
- Sitzungs-, Benutzer- und Kontodaten liegen als Tabellen `session`, `user`, `account`, `verification` in derselben `app.sqlite3` und werden mitgesichert. Alle Zeitdaten sind benutzerbezogen (`user_id`); der Selbstschutz verhindert, das eigene Konto oder den letzten Admin zu löschen.
- Einstellungen → Konto: Passwort ändern (aktuelles nötig) und E-Mail ändern (gilt sofort, ohne Bestätigungs-Mail – kein SMTP im Heimnetz).
## Entwicklung und Tests