Tipps & Tricks - Benutzerverwaltung per Prozess

Dieser Beitrag zeigt, wie Benutzergruppen per Prozess angelegt werden können. Auch die automatisierte Anlage und Zuordnung von Benutzern zu Benutzergruppen wird erklärt. Außerdem finden Sie hier Groovy-Skript für das Auslesen der Mitgliedschaften eines Benutzers.

Benutzergruppe anlegen

In jedem Prozess können Benutzergruppen mit einer Datengruppenaktion angelegt werden. Legen Sie dazu zunächst eine Quelle für die Daten, z.B. einen Ereignisbehandler an. In den Eigenschaften des Ereignisbehandlers können Sie die Herkunft der Daten für die neue Benutzergruppe, wie z.B. den Namen, festlegen. Verbinden Sie dann eine Datengruppenaktion mit der Ereignisquelle.

Wählen Sie in den Eigenschaften der Datengruppenaktion die Aktion "Datensatz hinzufügen".

Als Zieldatengruppe wählen Sie die Datengruppe "Set" aus der Systemapplikation "Benutzer" aus.

In der Feldzuordnung sollten dem Ziel - der neuen Benutzergruppe in der Benutzerverwaltung - nun mindestens die folgenden Werte zugeordnet werden:

  • eine GUID, die mit Klick auf "Benutzerdefinierter Wert" ganz einfach erstellt und anschließend zugeordnet werden kann

  • die Klassen ID 6 (Ganzzahl), die ebenfalls mit Klick auf "Benutzerdefinierter Wert" erstellt und anschließend zugeordnet werden kann

  • der Objektname

Sind die Einstellungen und der Prozess gespeichert, wird nun die neue Benutzergruppe erzeugt.

Benutzer anlegen

Neue Benutzer können per Prozess angelegt und einer Benutzergruppe zugeordnet werden. Eine Groovy-Aktion übernimmt das Einfügen mit folgendem Skript:

def user = g_om.createUser{
	container     = "System"
	name          = "user-${now().withoutFractionalSeconds}"
	loginName     = "UserU-${now().withoutFractionalSeconds}"
	emailBiz      = "user@example.org"
	description   = "User created with Groovy at ${now().withoutFractionalSeconds}"
	memberOf    = ["Users", "6AA80844C3F99EF93BF4598EB18605BF86FDD3C5"]
}

Das Zugriffsobjekt "g_om" stellt eine Struktur zur Verfügung, mit der Operationen in der Benutzerverwaltung und Organisationsstruktur eines Portals ausgeführt werden können. In diesem Skript-Beispiel werden beim Anlegen eines Benutzers die folgenden Eigenschaften gesetzt, wobei name und loginName erforderlich sind. Alle weiteren Eigenschaften sind optional.

  • container: Container, in dem das Benutzerobjekt angelegt werden soll. Angegeben werden kann der eindeutige Name (in unserem Beispiel "System", die GUID oder der Pfad des Containers

  • name: Der eindeutige Objektname
  • loginName: Der eindeutige Anmeldename
  • emailBiz: Die E-Mail-Adresse des Benutzers
  • description: Beschreibung des Benutzerobjekts
  • memberOf: Hier wird die Gruppenzugehörigkeiten des Benutzers definiert.

    Angegeben werden kann der eindeutige Name, die GUID (in unserem Beispiel "6AA80844C3F99EF93BF4598EB18605BF86FDD3C5") oder der Pfad der Gruppe.

Für Benutzernamen und Login wird hier ein Zeitstempel verwendet, um die Eindeutigkeit sicherzustellen. Wird in einer Benutzerverwaltung die Eindeutigkeit eines Benutzernamens und eines Logins nicht anhand einer ID oder eines Zeitstempels gewährleistet, sondern stattdessen ein anderes Format verwendet, wie z.B. vorname.nachname, muss beim Anlegen eines neuen Benutzers überprüft werden, ob bereits ein Benutzer mit gleichen Daten existiert und bei Bedarf eine entsprechende Fehlerbehandlung ausgeführt werden.

Mitgliedschaften eines Benutzers auslesen

Das folgende Skript kann verwendet werden, um die Gruppenzugehörigkeiten eines Benutzers zu ermitteln.

def user = g_om.getUser(g_session.user.guid)
def sets = g_om.getMembershipSets(user)
def strAdminGroupGuid = "EF16F15EDA8562E19D7DD75BF2OP3001F119193C"

if (sets*.guid.contains(strAdminGroupGuid))
	return adminGroupMemberTrue
else
	return adminGroupMemberFalse

In diesem Beispiel wird mit Hilfe von "g_session.user.guid" die GUID des aktuell angemeldeten Benutzers ausgelesen. "g_om.getMembershipSets(member)" liefert eine Liste mit allen - auch untergeordneten - Gruppen, in denen der übergebene Benutzer Mitglied ist. Anschließend kann mit Hilfe einer Iteration über die GUIDs der gefundenen Gruppen ermittelt werden, ob sich die GUID der Administratorengruppe (die Sie im Skript mit Ihrer eigenen Administratorengruppen-GUID ersetzen müssen) in der gelieferten Ergebnismenge befindet. In Abhängigkeit dieser Auswertung - in diesem Beispiel die Auswertung, ob der Benutzer Mitglied der Gruppe Administratoren ist - wird ein entsprechender Wert zurückgegeben, mit dem z.B. in einer Groovy-Bedingung weitere Prozessschritte gezielt angesteuert werden können.