Chromium reagiert im Kiosk-Modus nicht auf SIGTERM, sodass systemd
90 Sekunden auf den TimeoutStop wartete und dann SIGKILL senden musste.
ExecStop killt Chromium jetzt explizit per pkill, TimeoutStopSec=10.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
- SCHEMA.md: Index idx_media_assets_created_by_user_id hinzugefügt
- API-ENDPOINTS.md: GET/POST Media-Endpoints erweitert um owner_is_restricted und owner_username
- API-ENDPOINTS.md: DELETE Media-Endpoint mit Berechtigungslogik dokumentiert
* admin_user: immer erlaubt
* screen_user: erlaubt wenn asset.tenant_id == user.tenant_id
* restricted: erlaubt nur wenn asset.created_by_user_id == user.id
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>
Build-Task in signage_player/tasks/main.yml aufgeteilt: ohne GOARM (default arm64,
bestehende Hosts unverändert) und mit GOARM für armv7-Hosts. Neue host_vars und
Inventory-Einträge für raspi2a und raspi2b (Platzhalterwerte, TODO-Kommentare).
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>