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. Ein Zwischenergebnis einer Auswertung kann daher Objekte enthalten, die der Nutzer nicht lesen darf. Mit filterSecurity kann ein solcher Wert explizit so abgesichert werden, dass er nur noch lesbare Objekte enthält.

Die Prüfung erfolgt rekursiv:

Verwendung

Das Gesamtergebnis eines Skriptes muss nicht abgesichert werden: Es wird von der Anwendung beim Ausführen des Skriptes automatisch gefiltert, sofern die Security für das Skript nicht ausdrücklich abgeschaltet ist. Ein filterSecurity am Ende eines Skriptes ist damit überflüssig.

Die Funktion wird gebraucht, um einen Wert innerhalb einer Auswertung abzusichern – etwa ein Teilergebnis, das das Skript selbst ausgibt oder an einen anderen Kontext weitergibt. Sie sollte dabei nicht auf jeden Zwischenschritt angewendet werden: Wird sie zu früh 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.