enhancement
major
minor
major
minor
Der mit Ticket #29221 eingeführte "Pfad nach Ausdruck" für die Beschreibung von Rollen-Regeln verhält sich anders, als die bishrige "Pfadnavigation" in Bezug auf das inkrementelle Security-Update.
Gibt es eine Vererbungsregel (1) die Rollen von A auf B vererben soll, und eine weitere Vererbungsregel (2) die die Rollen weiter von B auf C vererben soll, so wurde folgendes Verhalten festgestellt:
Ist (1) eine Pfadnavigation und an Objekt A wird ein relevantes Attribut geändert, so funktioniert das inkrementelle Update und die Rollen auf C werden korrekt aktualisiert. Ein manuelles Ausführen eines vollständigen Security-Rebuilds ändert an den Berechtigungen nichts mehr.
Ist (1) hingegen ein "Pfad nach Ausdruck" so wird Schritt (2) beim inkrementellen Update nicht getriggert und die Rollen kommen auf C nicht wie erwartet an. Wird nun manuell ein vollständiger Security-Rebuild ausgeführt korrigieren sich die Berechtigungen entsprechend der Regel (2).
Ursache
Kann das inkrementelle Update (ElementSecurityUpdateManager) für eine Regel die betroffenen Basisobjekte nicht bestimmen, wird die Regel vollständig neu berechnet (invalidRules). Ein "Pfad nach Ausdruck" (PathByExpression) liefert das häufig, wenn sich sein Skript nicht rückwärts auswerten lässt (z.B. if, externe Prädikate, nicht in Schritte zerlegbare Ausdrücke); eine klassische Pfadnavigation liefert immer konkrete Objekte. Die Weitergabe an abhängige Vererbungsregeln (Regeln, deren Quellrolle die Rolle der geänderten Regel ist) erfolgt aber nur für Regeln mit konkreten Basisobjekten. Eine vollständig neu berechnete Regel wurde daher nicht an die von ihr abhängigen Vererbungsregeln weitergegeben, deren Einträge veralteten.
Lösung
Wird eine Regel vollständig neu berechnet, werden auch alle transitiv von ihrer Rolle abhängigen Vererbungsregeln vollständig neu berechnet (Hülle von invalidRules über die Vererbungsregeln mit der jeweiligen Rolle als Quellrolle).