Tickets liefen im Rechtebaum komplett ueber licenses.view/.create/.edit
mit, obwohl Tickets ein eigener, gleichberechtigter Navigationspunkt
neben Kunden und Lizenzen ist -- analog zu TESM, wo Clients/Switche/
Zugangsdaten trotz enger fachlicher Verwandtschaft jeweils eigene
Rechte haben. Ergaenzt die im vorigen Release (v1.2.4) behobene
Lizenz-Rechte-Luecke um diese zweite, gleich gelagerte Luecke.
- Neues Rechtepaar tickets.view/tickets.create/tickets.edit
(PERMISSIONS/PERMISSION_LABELS), Property can_manage_tickets.
- Nav-Sichtbarkeit sowie tickets_list()/ticket_new()/ticket_edit()/
ticket_delete() auf das neue Recht umgestellt.
- ticket_detail(): GET-Zugriff jetzt ueber can_manage_tickets. POST
jetzt PRO SUB-AKTION geprueft statt eines einzigen Gates:
'toggle_block' (Sperren/Entsperren) -> tickets.edit (neu, Ticket-
Domain); 'issue_license' (erstellt eine LIZENZ) bleibt bewusst
unveraendert an licenses.edit gebunden, damit sich 'Tickets
verwalten' und 'Lizenzen ausstellen' unabhaengig voneinander
vergeben lassen, ohne dass irgendjemand automatisch die eine
Faehigkeit durch die andere verliert.
- tickets.html/ticket_detail.html: can_edit-Variable entsprechend in
can_edit_ticket/can_issue_license aufgeteilt.
- Migration (_migrated_tickets_permission_v1, einmalig geguarded):
jede Gruppe mit licenses.view/.create/.edit bekommt automatisch das
gespiegelte tickets.view/.create/.edit dazu -- niemand verliert beim
Update stillschweigend eine Faehigkeit, die vorher implizit ueber
licenses.* mitlief.
- Getestet gegen isolierte Test-DB: Backfill korrekt (Gruppe mit voller
Lizenz-Berechtigung bekommt volle Ticket-Berechtigung, Gruppe mit nur
.view bekommt nur tickets.view), idempotent, keine Duplikate.
PERMISSIONS/PERMISSION_LABELS/NAV_ITEMS erneut vollstaendig
konsistent (keine Nav-Keys mehr ohne Rechte-Entsprechung), app.py
syntaktisch fehlerfrei kompiliert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>