requireScreenAccess prüft jetzt für Rolle 'restricted' zusätzlich
ob ein Eintrag in user_screen_permissions existiert. Tenant-Match
allein reichte bisher nicht — restricted User konnten alle Screens
des Tenants aufrufen.
data-owner-restricted wurde auch für restricted User selbst auf 'true'
gesetzt, wodurch deren eigene Medien durch CSS ausgeblendet wurden.
Fix: Attribut ist für restricted User immer 'false'.
- HandleDeleteMediaUI: check err after media.Get before using asset (prevents nil-pointer panic)
- HandleTenantDeleteMedia: add restricted-user ownership check (K3)
- HandleTenantDashboard: filter media list by ownerUserID for restricted users
- SCHEMA.md: correct created_by_user_id to 'text null ... on delete set null'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Login und already-logged-in-Check verwendeten default-Branch für restricted-Rolle,
der zum Tenant-Dashboard mit allen Screens führte. Jetzt wie screen_user behandelt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ScreenScheduleStore.Upsert: override_on_until aus INSERT und ON CONFLICT
entfernt — verhindert stillen Datenverlust beim Speichern eines Zeitplans.
SetOverrideOnUntil bleibt alleinig zuständig für diese Spalte.
- README.md: GlobalOverrideStore, vier neue API-Routen, Wochenend-Sperre
und Migration 006_override.sql dokumentiert.
- override.go: Auth-Scope-Kommentar über HandleSetGlobalOverride ergänzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fügt Reconcile() und desiredState() zum Scheduler-Package hinzu.
Der Reconciler läuft alle 5 Minuten, berechnet den Soll-Zustand aus
den konfigurierten Ein-/Ausschaltzeiten (inkl. Mitternacht-Überschreitung)
und sendet bei Abweichung oder unbekanntem Ist-Zustand einen MQTT-Befehl.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- API-ENDPOINTS.md: neue Sektion "Display-Steuerung" mit POST /api/v1/screens/{screenSlug}/display und POST /api/v1/screens/{screenSlug}/schedule
- SCHEMA.md: Hinweis zur vereinfachten screen_status-Tabelle (Migration 004) und neue Sektion screen_schedules (Migration 005)
- server/backend/README.md: scheduler-Package beschrieben, Migrationen 004+005 ergaenzt, Endpunkt-Tabelle aktualisiert
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ScheduleStore in RouterDeps, HandleUpdateSchedule-Handler, Scheduler-Goroutine
in app.Run(), ScreenStore.GetByID hinzugefügt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- playerstatus: look up screen by slug before UpsertDisplayState to pass UUID (not slug) and avoid FK violation
- router: switch display command route from authOnly to authScreen for proper permission enforcement
- display.go: remove redundant GetBySlug + requireScreenAccess (now handled by authScreen middleware), drop store dependency
- notifier: replace fmt.Sprintf %q with json.Marshal for correct JSON encoding of display command payload
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>