Lokaler Nutzerfilter für ein Microsoft Graph Benutzerverzeichnis

Der lokale Nutzerfilter kann verwendet werden, um bestimmte Einschränkungen der MS Graph API zu überwinden. Derzeit unterstützt die MS Graph API das Filtern von Nutzern nach ihren Gruppenmitgliedschaften nicht, wenn diese Filtergruppen nicht Teil der synchronisierten Gruppen sind. Obwohl diese Anforderung leicht mit einem LDAP-Ausdruck erfüllt werden kann, ist dies mit einer MS Graph-Abfrage nicht möglich.

Struktur

Der lokale Nutzerfilter funktioniert wie der normale Nutzerfilter und enthält einen OData-Filterausdruck. Der Unterschied besteht darin, dass er nicht Teil der Abfrage an die MS Graph API ist, sondern auf der Antwort, die empfangen wurde, im Haiilo-Backend ausgeführt wird. Dies erstellt effektiv einen zweistufigen Nutzerfilter.

Das Ziel ist es, die Größe der MS Graph-Antwort zu minimieren, indem so viel wie möglich in der 1. Stufe, dem 'Nutzerfilter', gefiltert wird, und dann Ausdrücke in der 2. Stufe, dem 'lokalen Nutzerfilter', verwendet werden, die von der MS Graph nicht unterstützt werden. Die Syntax und Grammatik von OData-Filterausdrücken sind die gleichen wie beim regulären MS Graph-Nutzerfilter.

Alle verwendeten Eigenschaftsnamen im Ausdruck des lokalen Nutzerfilters müssen in der Abfrage ausgewählt werden, damit sie in der MS Graph-Antwort erscheinen. Dies geschieht automatisch, ebenso wie die Unterscheidung zwischen auswählbaren und erweiterbaren Eigenschaften.

Die MS Graph API hat Einschränkungen, die schnell erreicht werden können. Zum Beispiel ist nur eine erweiterbare Eigenschaft in einer Abfrage erlaubt. Wenn Du im lokalen Nutzerfilter nach 'memberOf' filterst und 'extensions' im Profilfeldmapping verwendest oder das Managerfeld synchronisierst, ist die Grenze bereits überschritten.

Unterstützte OData-Ausdrücke

  • Equality operators
    • Equals (eq)
    • Not equals (ne)
    • Logical negation (not)
    • In (in)
  • Relational operator
    • Less than (th)
    • Greater than (gt)
    • Less than or equal to (le)
    • Greater than or equal to (ge)
  • Lambda operators
    • Any (any)
    • All (all)
    • Conditional operators
    • And (and)
    • Or (or)
  • Functions
    • Starts with (startsWith)
    • Ends with (endsWith)
    • Contains (contains)
  • Parentheses for grouping of operators
  • Data types:
    • null 
    • strings
    • integers
    • booleans
    • GUID

Du kannst diese mit der offiziellen Microsoft-Dokumentation zu Filtern vergleichen.

Vereinfachung von OData-Ausdrücken

Die folgenden Regeln helfen dabei, Ausdrücke zu vereinfachen, die die 'any', 'all' und 'in' Operatoren unter Verwendung von Boolescher Algebra verwenden:

x/any(p:expr1) or x/any(p:expr2) = x/any(p:expr1 or expr2)
x/any(p:expr1) and x/any(p:expr2) : can not be simplified
x/all(p:expr1) and x/all(p:expr2) = x/all(p:expr1 and expr2)
x/all(p:expr1) or x/all(p:expr2) : can not be simplified
(x eq a) or (x eq b) = x in (a, b)

Beispiele

Du hast eine Gruppe namens 'A' und eine andere namens 'B' und möchtest Nutzer synchronisieren, die Mitglieder beider Gruppen sind. Du möchtest jedoch nicht alle Nutzer von 'A' und 'B' gleichzeitig synchronisieren. Ein Nutzerfilterausdruck, der diese Anforderungen erfüllt, wäre:

memberOf/any(m:m/displayName eq 'A') and memberOf/any(m:m/displayName eq 'B')

Du möchtest nur die Nutzer auswählen, deren Manager im Büro in 'London' ist. Dies kannst Du mit einem lokalen Filterausdruck erreichen:

manager/city eq 'London'

Einschränkungen

MS Graph

  • Nicht mehr als 2 expandable properties erlaubt.

Lokale OData-Syntax und Grammatik

  • Expandable collections: nur 'memberOf' ist derzeit erlaubt
  • Die Eigenschaftsnamen sind Groß- und Kleinschreibungssensitiv. Verwende 'memberOf' und nicht 'memberof'
  • Vergleiche von collections und complex objects werden nicht unterstützt
  • Nicht unterstützte Grammatik:
    • Datentypen: date, time, duration, decimal, geography, geometry
    • OData 4 Funktionen: length, indexof, substring, tolower, toupper, trim, concat
    • 'has' Operator
    • Namespaces
    • Compound keys
    • Bound functions
    • Qualified entities
    • Enum types

War dieser Beitrag hilfreich?

0 von 0 fanden dies hilfreich