Jesko Anschütz
251e1fb15e
fix(ui): toggleRestrictedMedia war im falschen Template (screenOverviewTmpl statt manageTmpl)
2026-03-28 10:37:39 +01:00
Jesko Anschütz
e99cac4719
fix(ui): Toggle-Button 'Alles anzeigen' — JS direkt statt CSS-Klasse
2026-03-28 10:24:59 +01:00
Jesko Anschütz
3a0ac13faa
fix(auth): restricted User können nur zugewiesene Screens aufrufen
...
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.
2026-03-28 10:17:29 +01:00
Jesko Anschütz
3ebeaa70e1
fix(ui): restricted User sehen eigene Medien nicht (CSS-Hidden-Bug)
...
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'.
2026-03-28 09:34:13 +01:00
Jesko Anschütz
cc9ca2cd81
fix: nil-pointer in DeleteMediaUI, restricted delete-check in tenant handler, SCHEMA fix
...
- 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>
2026-03-28 09:18:12 +01:00
Jesko Anschütz
e884acf41d
docs: media_assets.created_by_user_id + Berechtigungslogik dokumentiert
...
- 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>
2026-03-28 09:14:35 +01:00
Jesko Anschütz
8bcb59468a
feat(ui): Restricted-Medien Toggle + Besitzer-Badge + Kein-Besitzer-Badge
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 09:13:07 +01:00
Jesko Anschütz
bfef6e25f5
feat(tenant): List/Create mit owner-Feld aktualisiert
2026-03-28 09:11:16 +01:00
Jesko Anschütz
7b0b132169
feat(ui): manage-Handler — restricted-aware List/Create/Delete
2026-03-28 09:09:59 +01:00
Jesko Anschütz
865c5e7ca8
feat(manage): canDeleteMedia + role-aware handlers für restricted users
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 09:07:13 +01:00
Jesko Anschütz
52f503d462
feat(store): MediaAsset-Ownership — List/Create/Get mit created_by_user_id
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 09:03:44 +01:00
Jesko Anschütz
c40c846436
feat(db): created_by_user_id zu media_assets hinzufügen
2026-03-28 09:01:00 +01:00
Jesko Anschütz
e6ad773e74
docs: Implementierungsplan user-spezifische Medien
2026-03-28 08:55:36 +01:00
Jesko Anschütz
922cb905b3
docs: spec — Besitzername bei Restricted-Medien anzeigen
2026-03-28 08:47:17 +01:00
Jesko Anschütz
0feb3073af
docs: spec erweitern — Toggle für Restricted-Medien (Admin + screen_user)
2026-03-28 08:45:07 +01:00
Jesko Anschütz
6d74a4aa30
docs: spec user-spezifische Medien für Restricted Users
2026-03-28 08:41:48 +01:00
Jesko Anschütz
522f15c3cd
fix(ansible): cloud-init deinstallieren und Verzeichnisse entfernen
2026-03-27 22:10:19 +01:00
Jesko Anschütz
3c7f5ce725
fix(ansible): network-online.target entfernen, network.target reicht
2026-03-27 22:09:27 +01:00
Jesko Anschütz
30548452bc
docs: Implementierungsplan Boot-Optimierung
2026-03-27 22:08:15 +01:00
Jesko Anschütz
2ccfd8592b
docs: spec Boot-Optimierung network-online + cloud-init
2026-03-27 22:07:34 +01:00
Jesko Anschütz
b4d0a24320
fix(auth): restricted-User landen nach Login auf eigenen Screens (nicht Tenant-Dashboard)
...
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>
2026-03-27 21:59:32 +01:00
Jesko Anschütz
787287b328
fix(restricted): Display-Box ausblenden; Sidebar zeigt nur eigene Screens
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:43:51 +01:00
Jesko Anschütz
f70ebddad2
docs: restricted-Rolle in API-Endpoints und README dokumentiert
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:40:48 +01:00
Jesko Anschütz
c943df4663
feat(ui): restricted-User sehen keine Steuerungs-UI (An/Aus, Zeitplan, Override)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:38:37 +01:00
Jesko Anschütz
e35c3cfdbd
feat(ui): Admin-Formular: Rolle-Dropdown + Badge in User-Liste
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:35:52 +01:00
Jesko Anschütz
03ea3edb8b
feat(handler): HandleCreateScreenUser liest role; UserRole ans Template übergeben
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:34:21 +01:00
Jesko Anschütz
f1dcb4f1d3
feat(router): Steuerungs-Endpunkte blocken restricted-User (403)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:32:40 +01:00
Jesko Anschütz
18ba448f05
feat(store): CreateScreenUser nimmt role-Parameter; ListScreenUsers schließt restricted ein
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:31:15 +01:00
Jesko Anschütz
700567071b
feat(auth): RequireNotRestricted middleware
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:29:26 +01:00
Jesko Anschütz
e0ea7f0bde
docs: Implementierungsplan für restricted-Rolle
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:26:54 +01:00
Jesko Anschütz
c5f222cad8
docs: Design-Spec für restricted-Rolle
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 21:19:50 +01:00
Jesko Anschütz
4996ff6def
feat(ansible): agent-Build unterstützt armv7 (Raspi 2) via agent_goarch/agent_goarm
...
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>
2026-03-27 21:08:06 +01:00
Jesko Anschütz
958090cb00
feat(admin): Link zu Monitor-Steuerung im Admin-Navbar
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:55:50 +01:00
Jesko Anschütz
bb30a75f5a
fix(ui): Admin sieht /manage mit allen Screens statt Redirect
2026-03-27 20:53:23 +01:00
Jesko Anschütz
f5d8311204
feat: Override, Wochenend-Sperre und per-Screen-Override implementiert
2026-03-27 20:38:10 +01:00
Jesko Anschütz
2bf82eed53
fix: Upsert löscht override_on_until nicht mehr; README + Auth-Kommentar
...
- 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>
2026-03-27 20:30:52 +01:00
Jesko Anschütz
db68c84d45
docs: API-ENDPOINTS + SCHEMA für Override und Wochenend-Sperre
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:25:50 +01:00
Jesko Anschütz
fc94f56162
feat(ui): per-Screen-Override in Übersichtskarte und Detailseite
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:24:21 +01:00
Jesko Anschütz
c263d97cca
feat(ui): Übersichtsseite – globaler Override-Banner
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:21:06 +01:00
Jesko Anschütz
9aabf18aa2
feat(wiring): GlobalOverrideStore in Router, App und Scheduler-Goroutinen
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:19:03 +01:00
Jesko Anschütz
42458e68ff
feat(manage): Handler für globalen + per-Screen-Override
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:17:20 +01:00
Jesko Anschütz
0ca63a5367
feat(scheduler): check() unterdrückt display_on bei Wochenende/Override
2026-03-27 20:15:21 +01:00
Jesko Anschütz
81711f2f3d
feat(scheduler): Reconciler iteriert alle Screens + resolveDesiredState
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:14:32 +01:00
Jesko Anschütz
e76f89798f
feat(scheduler): resolveDesiredState – per-Screen, global, Wochenende, Zeitplan
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:13:23 +01:00
Jesko Anschütz
be3a5f5aac
feat(store): ScreenSchedule.OverrideOnUntil – Struct, Get, Upsert, ListEnabled
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:11:41 +01:00
Jesko Anschütz
8f1abd977b
feat(store): GlobalOverrideStore + SetOverrideOnUntil
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:10:36 +01:00
Jesko Anschütz
1b7c48f27f
feat(db): Migration 006 – global_override-Tabelle + override_on_until
2026-03-27 20:09:23 +01:00
Jesko Anschütz
78a04dcee7
chore: .worktrees/ zu .gitignore hinzufügen
2026-03-27 20:07:56 +01:00
Jesko Anschütz
e0d7820480
docs: Implementierungsplan für Override und Wochenend-Sperre
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 20:07:06 +01:00
Jesko Anschütz
bb3f11fa66
docs: Design-Spec für globalen Override und Wochenend-Sperre
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 19:55:58 +01:00