enhancement
major
minor
major
minor
major
#29678
BoundHelper: Einstellung use-default-security-parent entfernen – ohne konfigurierte Security-Parent-Regel hat ein Objekt keinen Security-Parent
Problem
BoundHelper.Config#getUseDefaultSecurityParent() (@Name("use-default-security-parent")) ist ein einfaches boolean ohne Default-Annotation, liest also false, solange eine Anwendung es nicht setzt. Die Dokumentation behauptet das Gegenteil:
- specs/model-based-access-rights.md: "If no security parent rule is configured for a type, the global security root is used as the sole security parent -- provided use-default-security-parent is enabled (the default)."
- Der Upgrade-Guide 7.11 → 8.0 nennt den Fallback ebenfalls den Default.
In einer Anwendung, die der Spezifikation folgt, liegen Rollen auf dem Security-Root (SecurityStructure#ROOT). Diese Rollen erreichen dann kein Objekt eines Typs ohne explizite Security-Parent-Regel, und jeder Nicht-root-Benutzer sieht nichts (gefunden in der TL-Development-App, Snapshot-Build 42).
Lösung
Die Einstellung use-default-security-parent entfällt ersatzlos; die Semantik bleibt die des bisherigen effektiven Defaults (false): Ein Objekt, für dessen Typ keine Security-Parent-Regel konfiguriert ist, hat keinen Security-Parent. Der globale Security-Root ist nie implizit Security-Parent – weder zusätzlich zu konfigurierten Parents noch als Fallback. Wer Rollen vom Security-Root erben will, konfiguriert ihn explizit über eine Security-Parent-Regel mit <singleton module="SecurityStructure"/>.
- BoundHelper: Konfigurationsoption, Feld und useDefaultObject() entfernt.
- AbstractBoundWrapper#getSecurityParents(): liefert genau die konfigurierten Security-Parents.
- Spezifikation specs/model-based-access-rights.md und Upgrade-Guide 7.11 → 8.0 entsprechend korrigiert.
Migration
Eine Anwendung, die use-default-security-parent="true" in der BoundHelper-Konfiguration setzt, startet sonst mit einem Konfigurationsfehler (unbekannte Eigenschaft). Das Attribut entfernen und für jeden Typ, dessen Instanzen Rollen vom Security-Root erben sollen, eine Security-Parent-Regel auf den Root anlegen (bei gemeinsamem Obertyp einmal mit inherit="true"):
{{{#!xml <config service-class="com.top_logic.tool.boundsec.manager.AccessManager"> <instance> <security-parents> <rule id="SecRootForProject" inherit="true" meta-element="myapp:Project"> <singleton module="SecurityStructure"/> </rule> </security-parents> </instance> </config> }}}
Anwendungen, die die Option nicht gesetzt hatten, sind nicht betroffen.