diff --git a/docs/API-ENDPOINTS.md b/docs/API-ENDPOINTS.md index ac66752..88328bf 100644 --- a/docs/API-ENDPOINTS.md +++ b/docs/API-ENDPOINTS.md @@ -535,6 +535,7 @@ Beide Endpunkte erfordern `RequireAuth` + `RequireScreenAccess` (`authScreen`-Mi Sendet einen MQTT-Befehl zum Ein- oder Ausschalten des physischen Displays. **Auth:** Erforderlich (Bearer-Token oder Session-Cookie). Screen-Zugriff erforderlich. +**Rollen:** Nur `admin_user` und `screen_user`. Benutzer mit Rolle `restricted` erhalten `403 Forbidden`. **Path-Parameter:** - `screenSlug` — Slug des Screens @@ -552,6 +553,7 @@ oder **Fehler:** - `400 Bad Request` — `state` ist nicht `"on"` oder `"off"`, oder ungültiges JSON +- `403 Forbidden` — Benutzer hat nicht die erforderliche Rolle (restricted-Benutzer dürfen Display nicht steuern) - `502 Bad Gateway` — MQTT-Publish fehlgeschlagen --- @@ -561,6 +563,7 @@ oder Speichert den Zeitplan für das automatische Ein-/Ausschalten eines Displays. **Auth:** Erforderlich. Screen-Zugriff erforderlich. +**Rollen:** Nur `admin_user` und `screen_user`. Benutzer mit Rolle `restricted` erhalten `403 Forbidden`. **Path-Parameter:** - `screenSlug` — Slug des Screens @@ -582,6 +585,7 @@ Der Scheduler prüft jede Minute, ob die aktuelle Uhrzeit mit `power_on_time` od **Fehler:** - `400 Bad Request` — Zeitformat ungültig (nicht `HH:MM`), oder ungültiges JSON +- `403 Forbidden` — Benutzer hat nicht die erforderliche Rolle (restricted-Benutzer dürfen Zeitplan nicht ändern) - `404 Not Found` — Screen nicht vorhanden - `500 Internal Server Error` — DB-Fehler @@ -612,6 +616,8 @@ Ruft den aktuell aktiven globalen Override ab. Setzt einen globalen Override und sendet sofort MQTT-Befehle an alle Screens. +**Rollen:** Nur `admin_user` und `screen_user`. Benutzer mit Rolle `restricted` erhalten `403 Forbidden`. + **Request-Body:** ```json {"type":"off","until":"2026-04-05T18:00:00+02:00"} @@ -624,6 +630,7 @@ Setzt einen globalen Override und sendet sofort MQTT-Befehle an alle Screens. **Fehler:** - `400 Bad Request` — `type` nicht "on"/"off", oder ungültiges Zeitformat +- `403 Forbidden` — Benutzer hat nicht die erforderliche Rolle (restricted-Benutzer dürfen Override nicht setzen) - `500 Internal Server Error` — DB-Fehler --- @@ -632,9 +639,12 @@ Setzt einen globalen Override und sendet sofort MQTT-Befehle an alle Screens. Hebt den aktuellen globalen Override auf. +**Rollen:** Nur `admin_user` und `screen_user`. Benutzer mit Rolle `restricted` erhalten `403 Forbidden`. + **Response:** `204 No Content` **Fehler:** +- `403 Forbidden` — Benutzer hat nicht die erforderliche Rolle (restricted-Benutzer dürfen Override nicht löschen) - `500 Internal Server Error` — DB-Fehler --- @@ -651,6 +661,7 @@ Setzt oder löscht den per-Screen "Einschalten bis"-Override. Mit diesem Overrid dem angegebenen Zeitpunkt eingeschaltet, selbst wenn der globale Schedule "aus" vorsieht. **Auth:** Erforderlich. Screen-Zugriff erforderlich. +**Rollen:** Nur `admin_user` und `screen_user`. Benutzer mit Rolle `restricted` erhalten `403 Forbidden`. **Path-Parameter:** - `screenSlug` — Slug des Screens @@ -669,6 +680,7 @@ Um den Override zu löschen, `on_until` auf `null` setzen: **Fehler:** - `400 Bad Request` — Ungültiges Zeitformat oder ungültiges JSON +- `403 Forbidden` — Benutzer hat nicht die erforderliche Rolle (restricted-Benutzer dürfen Override nicht setzen) - `404 Not Found` — Screen nicht vorhanden - `500 Internal Server Error` — DB-Fehler @@ -686,6 +698,17 @@ Spezialendpoint zur Auflösung von Nachrichten-Wand-Anfragen (noch in Entwicklun Alle Auth-Routen erfordern keine vorherige Authentifizierung. +### Benutzerrollen + +Das System unterscheidet folgende Rollen: + +- `admin_user` — Volller Zugriff auf alle Funktionen, inkl. Benutzerverwaltung und Display-Steuerung +- `screen_user` — Darf Medien hochladen, Playlists bearbeiten und Displays steuern (An/Aus, Zeitplan, Override) +- `restricted` — Darf Medien hochladen und Playlist bearbeiten. Keine Display-Steuerung (An/Aus, Zeitplan, Override). Betroffene Endpunkte antworten mit 403 Forbidden. +- `tenant_user` — Tenant-Operator für Self-Service-Dashboard (Medienupload, Tenantmenü) + +--- + ### GET / Root-Redirect auf `/login`. diff --git a/server/backend/README.md b/server/backend/README.md index 328b41b..aae0ea9 100644 --- a/server/backend/README.md +++ b/server/backend/README.md @@ -11,6 +11,13 @@ Dieses Verzeichnis enthaelt das zentrale Go-Backend fuer das Info-Board-System. - Player-Status-Ingest und Diagnose - MQTT-Notifizierungen bei Playlist-Aenderungen +## Benutzerrollen + +- `admin_user` — Volller Zugriff auf alle Funktionen +- `screen_user` — Darf Medien hochladen und Playlist bearbeiten. Display-Steuerung (An/Aus, Zeitplan, Override) +- `restricted` — Darf Medien hochladen und Playlist bearbeiten. Keine Display-Steuerung. +- `tenant_user` — Tenant-Operator für Self-Service-Dashboard + ## Unterstruktur - `cmd/api/` — Startpunkt des Backends