enhancement
major
minor
defect
critical
major
minor
major
#30096
Rechtesystem: Konfigurierbaren Group-Mapper des ElementAccessManager entfernen
Problem
Der ElementAccessManager hat die Option group-mapper. Ein konfigurierter Mapping bildet dort bei Rollenregeln vom Typ reference das Endobjekt des Regelpfads auf die Gruppe ab, die die Rolle erhält (RoleRule.getGroupsFor()).
Diese programmatische Abbildung ist für die inkrementelle Rechteberechnung unsichtbar. Der ElementSecurityUpdateManager erkennt nur Änderungen an Referenzen, die auf einem Regelpfad liegen, und rechnet nur dann die betroffenen Basisobjekte neu. Ändern sich Daten, die nur der Mapper liest, bleiben die Rechte bis zum nächsten vollständigen Neuaufbau falsch. Das betrifft etwa den ContactGroupMapper: Wird einem PersonContact eine andere Person zugeordnet, ändert sich die Gruppe, ohne dass die Rechte neu berechnet werden.
Lösung
- Die Abbildung auf die Gruppe wird in RoleRule fest verdrahtet: Eine Group bleibt sie selbst, eine Person wird auf ihre repräsentative Gruppe abgebildet, andere Objekte ergeben keine Gruppe.
- Die Option group-mapper entfällt am ElementAccessManager (GROUP_MAPPER, getGroupMapper()).
- Die Klassen com.top_logic.element.boundsec.manager.rule.GroupMapper (unbenutzte Kopie), com.top_logic.tool.boundsec.manager.SimpleGroupMapper und com.top_logic.contact.boundsec.manager.rule.ContactGroupMapper entfallen.
- Rollenregeln, deren Pfad bei einem PersonContact endet, bekommen einen expliziten Schritt zur Person. Damit liegt auch diese Navigation auf dem Regelpfad und wird inkrementell nachgeführt. In der Demo betrifft das die Regeln DemoSecurity.A_Role1 und DemoSecurity.A_Role2.
Migration
- Den Eintrag <group-mapper .../> aus der Konfiguration des AccessManager entfernen.
- Jede Rollenregel vom Typ reference, deren Pfad bei einem Contacts:PersonContact endet, um einen Schritt zur Person ergänzen:
{{{#!xml <path> <step attribute="..."/> <step attribute="tl.accounts:Person#contact" inverse="true"/> </path> }}}
- Eigene Mapping-Implementierungen mit weiterer Logik als „Gruppe bzw. Person auf Gruppe“ müssen als Navigationsschritte in die betroffenen Rollenregeln übernommen werden. Liegt die Zuordnung noch nicht als Referenz im Modell vor, muss sie dort zuerst modelliert werden.
- Die Klassen com.top_logic.element.boundsec.manager.rule.GroupMapper, com.top_logic.tool.boundsec.manager.SimpleGroupMapper und com.top_logic.contact.boundsec.manager.rule.ContactGroupMapper entfallen. Eigener Code, der sie verwendet oder von ihnen ableitet, entfernt diese Verwendungen.