Einfache Userverwaltung in Benutzergruppen

mit NINTEX Workflows

 

In dieser Blog-Reihe befassen wir uns mit einem mächtigen Drittanbieter-Tool, „NINTEX Workflows“ für den SharePoint, welches das Arbeiten nicht nur optisch ansprechend, sondern im Gegensatz zu den integrierten SharePoint Workflows, um ein Vielfaches einfacher darstellt. Der folgende Beitrag soll das Hinzufügen/Löschen von Benutzern zu und aus Benutzergruppen schrittweise darstellen.

Hintergrund: Es soll Mitarbeitern, die nur über Contribute-Berechtigungen im SharePoint verfügen, die Möglichkeit gegeben werden, automatisiert User zu Benutzergruppen hinzuzufügen oder zu entfernen. Als Technologie wird hierfür Nintex Workflow und Nintex Forms benutzt.

 

Folgende Listen werden benötigt:

nintex workflows

Liste "Groups":

nintex workflows

Liste "Users":

nintex workflows

Hier ein Beispiel für Liste "User":

nintex workflows

Workflows:

Gesamtübersicht des Workflows für die Liste „Groups“

 

nintex workflows

 

Der Workflow zur Erstellung einer neuen Gruppe startet, sobald ein neues Element in der Liste „Groups“ angelegt wird. Über einen Webservice wird sodann die Gruppe erstellt:

 

 

nintex workflows

 

Sofern bei der Erstellung der Gruppe ein Fehler aufgetreten ist, wird eine Mail an den Administrator versandt, der über den Fehler informiert wird und zeitnah einschreiten kann. 

Andernfalls verläuft der Workflow nach Plan und entfernt den Initiator aus der erstellten Gruppe (wird im SharePoint im Standard immer der Gruppe hinzugefügt):

 

nintex workflows

 

In weiterer Folgen werden über „GetGroupInfo“ alle Infos zu der Gruppe ausgelesen und in einer Variable „Groupinfo“ gespeichert:

 

nintex workflows

 

Aus dieser Variable wird anschließend die ID der Gruppe ausgelesen.

 

nintex workflows

 

…und in die Eigenschaften der Datei geschrieben.

 

nintex workflows

 

Dies ermöglicht es den Seitenmanagern (mit entsprechender Berechtigung) über den Link „Edit Membership“ direkt in die Administrationsoberfläche der Gruppe zu springen, da diese eine berechnete Spalte ist, die sich auf die GroupID bezieht.

(=“<a href=““javascript:void();““ onclick=““OpenPopUpPage(‚/sites/epptt/ppmt/_layouts/15/people.aspx?IsDlg=1&MembershipGroupId=“&GroupId&“‚,null,null,null,'“&Title&“‚);““>Edit membership</a>“)

 

nintex workflows

Workflow Users

Der gesamte Workflow, zur besseren Übersicht aufgeteilt in 4 Spalten:

 

nintex workflows

 

Zuerst lesen wir die Spalte „Roles“ aus und fügen die einzelnen Rollen in eine Variable „AssignedRoles“ vom Typ Collection:

 

nintex workflows

 

Anschließend lesen wir den Benutzer aus und speichern den Namen in einer Textvariable:

 

nintex workflows

 

Der folgende Webservice-Aufruf liest alle Gruppen zu dem User aus und speichert die Daten in einer Variable vom Typ „Multiple lines of text“:

 

nintex workflows

 

Aus dieser Variable ziehen wir die Namen der Gruppen heraus und speichern sie in einer weiteren Collection:

 

nintex workflows

 

Somit haben wir nun folgende Collection:

  • AssignedRoles: Rollen (Gruppen), die dem User zugewiesen werden sollen
  • CurrentRoles: Rollen (Gruppen), die der User aktuell bereits inne hat 

Nun müssen wir über eine „For-each-Funktion“ überprüfen, ob jede einzelne CurrentRole in AssignedRoles vorhanden ist. Hierzu speichern wir jede einzelne CurrentRole in einer Variable „Role“,….

 

nintex workflows

 

…prüfen, ob diese dann in der Collection „AssignedRoles“ enthalten ist.

 

nintex workflows

 

Falls der Wert nicht enthalten ist wird er in eine Collection „RoleToRemove“ gespeichert,…

 

nintex workflows

 

…alle anderen Werte werden aus der Collective „AssignedRoles“ entfernt:

 

nintex workflows

Info:

Die zwischengeschaltete If-Funktion prüft nur ab, ob der Rollen-/Gruppenname ein bestimmtes Wort enthält (gemäß der Bezeichnung der Website). Dies kann für den weiteren Verlauf ignoriert werden.

Die Ergebnisse, d.h. aus welchen Gruppen der User entfernt oder hinzugefügt werden muss, werden im Workflowverlauf hinterlegt:

 

nintex workflows

 

Für jede Gruppe, aus der der User entfernt werden soll…

 

nintex workflows

 

 ….wird eine User defined action (kurz: UDA) gestartet, der als Input der Gruppenname und der User Login Name übergeben wird. Diese UDA sieht wie folgt aus:

 

nintex workflows

 

Die User defined action enthält folgende Funktionen:

 

nintex workflows

 

Sofern Gruppenname oder Username leer sind wird eine Fehlermeldung erstellt und in der Variable Error gespeichert:

 

nintex workflows

 

Bei ausgefülltem Gruppen- und Usernamen wird der entsprechende User aus der Gruppe entfernt:

 

nintex workflows

 

Zurück im Hauptworkflow: Nachdem die For-each-Funktion zum Entfernen aus den Gruppen abgeschlossen ist wird die nächste For-each-Funktion zum Hinzufügen in die „AssignedRoles“ gestartet:

 

nintex workflows
nintex workflows

 

Ebenfalls werden wieder Gruppen- und Username an eine User-defined-Action übergeben…

 

nintex workflows

 

…und der User nach gleichem Schema der Gruppe hinzugefügt:

 

nintex workflows
nintex workflows

Zurück im Hauptworkflow

Der User wurde aus speziellen Gruppen entfernt bzw. zu Gruppen hinzugefügt. Dies kann genutzt werden, um z.B. den Zugang für User zu bestimmten Bibliotheken zu gewährleisten oder zu entziehen. Was aber, wenn alle Benutzer generell einer allgemeinen Gruppe hinzugefügt werden sollen, die den allgemeinen Zugang zur Seite managed? Hierfür muss der User in eine „Default Group“ aufgenommen werden:

An die UDA „Check Group Membership“ wird der default group name übergeben sowie der Name des Users:

 

nintex workflows

 

Die UDA prüft, ob der User Mitglied der default group ist (gleiche Vorgehensweise wie oben).

 

Sofern der User noch nicht Mitglied der Gruppe ist…

 

 

nintex workflows

 

…wird er über die UDA zum Hinzufügen von Benutzern zu Gruppen (siehe weiter oben) in die default group aufgenommen:

 

nintex workflows