Die Lizenzseite (Einstellungen -> Lizenz) hatte im Rechtebaum keinen
eigenen Eintrag -- sie lief komplett ueber settings_system.view/.edit
mit. Damit konnte 'Lizenz verwalten' nicht unabhaengig von 'Systemein-
stellungen verwalten' vergeben/eingeschraenkt werden (Hostname/Zeitzone/
Pruefintervall/Log-Rotation/Papierkorb-Frist/Nav-Reihenfolge).
- Neues Rechtepaar settings_license.view/settings_license.edit
(PERMISSIONS/PERMISSION_LABELS), Property can_view_settings_license.
- Nav-Sichtbarkeit und alle /settings/license*-Routen auf das neue
Recht umgestellt (view-Route: can_view_settings_license; alle
mutierenden Routen -upload/-activate(/confirm)/-deactivate(/confirm):
settings_license.edit). Das "auch ohne aktive Lizenz sichtbar
bleiben"-Verhalten bleibt unveraendert (andere Pruefung, license_active()).
- settings_license.html: can_edit auf settings_license.edit umgestellt.
- Migration (_migrated_settings_license_permission_v1, einmalig
geguarded): jede Gruppe mit settings_system.view/.edit bekommt
automatisch settings_license.view/.edit dazu -- niemand verliert beim
Update stillschweigend Zugriff, den er vorher implizit hatte.
- Getestet gegen isolierte Kopie der Dev-DB: Backfill korrekt (inkl.
Gruppe mit nur .view, die korrekt KEIN .edit bekommt), idempotent bei
zweitem Lauf, has_permission()/_nav_key_visible() liefern die
erwarteten Werte je Testgruppe.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>