UUX: Elemente ein/ausblenden abhängig von Benutzerrolle

Manchmal ist es nötig Elemente in Service-Formularen, Previews oder Dialogen, abhängig von einer Benutzerrolle, Elemente dynamisch ein- oder auszublenden, bzw. diese mit einem Schreibschutz zu versehen. Aber wie ist es in Formularen eigentlich möglich herauszufinden, ob ein Benutzer Mitglied einer bestimmten Rolle ist?

Ganz einfach, mit dem Layout Designer & einer eigenen Datenquelle. Lass uns keine Zeit verlieren & direkt anfangen!

1. Feststellen, ob aktueller Benutzer Mitglied einer Rolle ist

Als Beispiel prüfen wir hier mal, ob der angemeldete Benutzer in der Administration-Rolle ist.

1.1 Auf ID oder Name prüfen

Zuerst müssen wir uns entscheiden, ob wir gegen ID der Rolle oder den Namen prüfen wollen. Beides hat vor und Nachteile, aber ehrlich gesagt ist es einfach eine sch**ß Idee, gegen Namen zu prüfen. Von daher suche ich mir hier erst mal die ID der zu prüfenden Rolle über die Dev-Tools raus, weil ich zu faul für das SQL-Management-Studio bin 😉

Über die Entwicklertools ist es in der Matrix42 UUX möglich, DB-Werte wie die ID, Expression-Objekt-ID oder Pickup-Werte herauszufinden. Man muss nur eine Datenliste öffnen, in der die Objekte geladen werden.

So, nun wissen wir, dass die Administrationsrolle die ID ‘a5d7b682-b211-4d94-a96d-8c57eedafdea’ & die Expression-Objekt-ID (EOID) ’77d0396f-79b1-45fe-921c-f43eaf3b1845′ hat.
Ich empfehle dir, die EOID zu nehmen, da diese ja über alle Tabellen für dieses Objekt gleich ist.

1.2 Das ASQL Filterstatement

Nun müssen wir uns ein ASQL-Filterstatement zusammenbauen. Ich baue das natürlich nicht jedes Mal wirklich neu, sondern tausche die ID der Rolle aus 😉

[Expression-ObjectID] = '77d0396f-79b1-45fe-921c-f43eaf3b1845' and Members.ID = IDDesZuPrüfendenBenutzersCode-Sprache: JavaScript (javascript)

Die ID des zu prüfenden Users ziehen wir uns später dynamisch im Formular (CurrentUser).

Statement im QueryAnalyzer
asql statement im matrix42 query analyzer
Ein Bild der Abfrage im Query-Analyzer, mit der Personen-ID eines Mitgliedes der Admin-Rolle

Falls du dich des Öfteren fragst, wie gewisse Felder in Dialogen eigentlich in der Datenbank heißen, siehst du hier, wie du Datenbank-Feldnamen über die UUX herausfinden kannst.

2. Dialog / Preview / Formular anpassen

Als Beispiel blenden wir hier einfach in der Preview von Personen das Beschäftigungsverhältnis für Nicht-Admins aus.

beschäftigungsverhältnis in personen preview

Das ganze funktioniert aber in jeder Preview und in jedem Dialog, auch in deinen eigenen Service-Formularen, Asset-Dialogen, etc.

2.1 Layout-Designer öffnen

Zuerst müssen wir die Preview im Layout-Designer öffnen.

layout designer in personen preview öffnen

2.2 Datenquelle hinzufügen

Nun fügen wir uns eine neue Datenquelle hinzu.

snag 2a9470b
datenquelle für benutzerrollen hinzufügen
Anschließend auf “Hinzufügen” klicken. Bitte nicht anschließend diese Eigenschaften der Datenquelle ändern, das ist leider immer wieder fehlerhaft. Bitte im Fall der Fälle neu anlegen, nicht bearbeiten 😉

Mit dieser Datenquelle fragen wir im nächsten Schritt ab, ob der aktuelle Benutzer Mitglied der Rolle ist.

2.3 Filter einsetzen

Gut, nun haben wir eine Datenquelle in der Preview, die alle Benutzerrollen abfragen kann.

Um den Filter zu setzen, arbeiten wir mit der roten $filter Eigenschaft an der Datenquelle.

filter eigenschaft der datenquelle

Diese Variable muss den Filter String von oben zurückgeben & den CurrentUser dynamisch einfüllen. Das Ganze machen wir im erweiterten Modus der $filter-Eigenschaft mit JavaScript String Concatenation:

filter auf adminrolle mit dynamischer benutzervariable
return "[Expression-ObjectID] = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' and Members.ID = '" + currentUser.$value + "'";Code-Sprache: PHP (php)
Video zum Hinzufügen des Filters

2.4 Boolesche Prüf-Variable erstellen

Klasse! Nun haben wir eine Datenquelle, die uns einen Treffer zurückliefert, sollte der Benutzer in der Rolle “Administration” sein. Nun müssen wir nur prüfen, ob die Datenquelle mindestens ein Ergebnis zurückliefert und falls ja, eine (neue) Kontext-Variable auf True oder Flase setzen.

Da wir ja in unserem Beispiel ein Feld verstecken wollen, wenn der User kein Admin ist, muss der Wert unserer Booleschen Variable also True sein, wenn der Nutzer Admin ist. (Denn Sichtbarkeit = Ja, wenn Nutzer = Admin)

layout designer neue variable im kontext erstellen
Neue Eigenschaft im Kontext hinzufügen
if totalcount bigger 0 true else false
Namen vergeben, Typ auf Bool ändern, totalCount der Datenquelle beobachten.
if (totalCount.$value && totalCount.$value > 0){
    return true;
}
return false;Code-Sprache: JavaScript (javascript)

Somit hat unsere Variable den Wert True, wenn die Datenquelle mindestens einen Treffer hat und der aktuelle Benutzer somit Mitglied der Admin-Rolle ist. Wenn nicht, ist die Varible False.

Falls du keine Booleschen Variablen magst, schau mal wie du Powershell-Arrays im Matrix42 Workflow Studio verwenden kannst 😉

2.5 Sichtbarkeit-Eigenschaft mit Attribut verknüpfen

Nun müssen wir diese Variable noch mit der Sichtbarkeit vom Feld Beschäftigungsverhältnis verknüpfen und das war’s auch schon.

sichtbarkeit mit variable verknüpfen
Anschließend veröffentlichen nicht vergessen 🙂

Fertig

Geschafft! Nun ist das Feld dynamisch eingeblendet und die Preview sieht für Nicht-Admins so aus:

preview von person mit ausgeblendetem feld

Lass uns gerne dein Feedback da, wir würden uns sehr freuen!

morpheus42 Icon

Hallo 👋
Schön, dich zu treffen.

Trag dich ein, um neue ESM-Beiträge direkt in deinen Posteingang zu bekommen!

Wir senden keinen Spam! Erfahre mehr in unserer Datenschutzerklärung.

Foto des Autors
Autor
Simon
Gründer von morpheus42, ESM Senior Consultant, Kaffee-Suchtie & Smart Home Fanatiker. A wise man once said: "Have you cleared the Cache?"

Abonnieren
Benachrichtige mich bei
guest
11 Comments
Oldest
Newest Most Voted
Inline Feedbacks
Alle Kommentare anzeigen
Send this to a friend