Syntax

$base.filterSecurity()

filterSecurity($base)

Beschreibung

Wendet die Lese-Berechtigungen des angemeldeten Nutzers auf einen Wert an und entfernt alle Fachobjekte, die der Nutzer nicht sehen darf.

Beim Zugriff auf Modellelemente werden referenzierte Objekte in TL-Script grundsätzlich ungefiltert zurückgegeben – konsistent zur Oberfläche, die ein referenziertes Objekt immer mit seiner Beschriftung anzeigt und nur die Navigation in das Objekt absichert. Lediglich der Zugriff auf die Attribute eines Objektes wird verweigert, wenn der Nutzer das Objekt nicht lesen darf. Mit filterSecurity kann das Endergebnis eines Skripts (oder ein Zwischenergebnis) explizit so abgesichert werden, dass es nur noch lesbare Objekte enthält.

Die Prüfung erfolgt rekursiv:

Verwendung

Da Zugriffe in TL-Script ihre Ergebnisse ungefiltert liefern, wird das Ergebnis eines Skriptes nicht automatisch abgesichert. Ein Skript, dessen Resultat einem Nutzer angezeigt oder an einen anderen Kontext weitergegeben wird, sollte sein Gesamtergebnis daher an der äußersten Stelle mit filterSecurity umschließen. Damit ist sichergestellt, dass das zurückgegebene Ergebnis ausschließlich Objekte enthält, die der angemeldete Nutzer sehen darf.

Die Funktion sollte nur das Endergebnis absichern, nicht jeden Zwischenschritt: Wird sie zu früh in einer Auswertung eingesetzt, können nachfolgende Schritte Objekte verlieren, die zur Berechnung benötigt werden (z. B. für einen Filter), obwohl das Endergebnis selbst lesbar wäre.

Parameter

Name Typ Beschreibung Pflicht Default
base Beliebiger Wert Der abzusichernde Wert: ein Fachobjekt, eine Sammlung von Fachobjekten oder ein primitiver Wert. ja

Rückgabewert

Typ: Gleicher Typ wie das Argument

Der gegebene Wert, der nur noch die für den angemeldeten Nutzer lesbaren Fachobjekte enthält.

Beispiele

Beispiel 1

all(`myModule:Contract`).map(c -> $c.get(`owner`)).filterSecurity()

Ausgabe: Die Owner aller Verträge, beschränkt auf die Personen, die der angemeldete Nutzer lesen darf.

Beispiel 2

$contract.get(`owner`).filterSecurity()

Ausgabe: Der Owner des Vertrags, falls der angemeldete Nutzer ihn lesen darf, andernfalls null.

Beispiel 3

all(`myModule:Contract`).filter(c -> $c.get(`owner`) != null).filterSecurity()

Ausgabe: Alle Verträge mit gesetztem Owner – der Filter wertet den (ungefilterten) Owner aus, das filterSecurity am Ende beschränkt das Ergebnis dann auf die Verträge, die der angemeldete Nutzer sehen darf.