Rechtesystem-Lücke schließen: Live-Log war nur @login_required statt admin-geschützt
Vollständiges Audit aller Routen gegen das Rechtesystem durchgeführt. Die Nav-Sichtbarkeit stufte "Live" (Live-Log) bereits korrekt als admin-only ein (_nav_key_visible: logs_live -> user.is_admin), die zugehörigen Routen /logs und /get_log prüften das aber nie tatsächlich — nur @login_required. Jeder eingeloggte Benutzer, unabhängig von seinen Gruppen-Rechten, konnte das Live-Log damit direkt per URL aufrufen, obwohl die Sidebar es korrekt ausblendete. - /logs: fehlende is_admin-Prüfung ergänzt (Flash + Redirect, konsistent zu activity_log()/users()/groups()/settings()). - /get_log: fehlende is_admin-Prüfung ergänzt (403, da per AJAX abgerufen). Alle anderen neu hinzugekommenen Seiten (Benutzer, Gruppen, Systemein- stellungen, Im-/Export, Änderungslog, Jetzt-prüfen-Trigger) waren bereits korrekt und bewusst exklusiv auf is_admin geprüft — dort gibt es keine sinnvolle granularere Rechte-Stufe unterhalb von Admin (Gruppenverwaltung steuert das Rechtesystem selbst, Systemeinstellungen/Import-Export/manuelle Prüfung wirken global). Zugangsdaten bleiben bewusst an switches.*-Rechte gekoppelt (bestehende, dokumentierte Design-Entscheidung). README um eine Übersicht ergänzt, welche Bereiche bewusst ohne granulare Rechte auskommen und warum. Mit Testbenutzer ohne jede Gruppenzugehörigkeit verifiziert: /logs liefert jetzt 302 (Redirect), /get_log liefert 403 statt beide zuvor 200. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -145,6 +145,17 @@ Aktion (Buttons, Toggle-Switches, Formulare) ist an das jeweilige Recht
|
||||
gekoppelt — im Frontend ausgeblendet **und** im Backend serverseitig
|
||||
durchgesetzt, unabhängig vom Frontend.
|
||||
|
||||
**Bewusst ohne granulare Rechte, exklusiv Admins vorbehalten:** Benutzer,
|
||||
Gruppen, Systemeinstellungen (Prüfintervall), Im-/Export, Änderungslog,
|
||||
Live-Log und der manuelle „Jetzt prüfen“-Trigger. Für diese Bereiche gibt es
|
||||
keine sinnvolle Teilmenge unterhalb von „Admin“ — Gruppenverwaltung steuert
|
||||
direkt das Rechtesystem selbst (Delegation wäre eine Privilegien-Eskalation),
|
||||
Systemeinstellungen/Import-Export/manuelle Prüfung wirken sich global aus,
|
||||
und das Änderungslog protokolliert alle Benutzer systemweit. Live-Log und
|
||||
`/get_log` waren zwischenzeitlich nur über `@login_required` statt echter
|
||||
Admin-Prüfung abgesichert (die Sidebar blendete den Punkt zwar korrekt aus,
|
||||
die Route selbst nicht) — inzwischen serverseitig nachgezogen.
|
||||
|
||||
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`,
|
||||
|
||||
Reference in New Issue
Block a user