22. Februar 2018

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:


Liste "Groups":


Liste "Users":


Hier ein Beispiel für Liste "User":


Workflows

Gesamtübersicht des Workflows für die Liste "Groups"




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:




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):


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


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


...und in die Eigenschaften der Datei geschrieben.




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>")



Workflow Users

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




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



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




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



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




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",….



...prüfen, ob diese dann in der Collection "AssignedRoles" enthalten ist.



Falls der Wert nicht enthalten ist wird er in eine Collection "RoleToRemove" gespeichert,...




...alle anderen Werte werden aus der Collective "AssignedRoles" entfernt:



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:




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




 ….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:




Die User defined action enthält folgende Funktionen:




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





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



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:





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




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


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:




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…





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