Qualitätssicherung der Benutzerverwaltung

Wir führen die Benutzerverwaltung in enaio unabhängig vom AD durch. Zudem haben wir eine Möglichkeit gesucht, um eine Qualitätssicherung der Benutzerverwaltung durchzuführen und die Prüfung dabei weitestgehend zu automatisieren. Hierfür haben wir ein Client-Script für den enaio client erstellt, das eine Reihe vordefinierter Anforderungen an Benutzerkonten prüft. Beispiele für Anforderungen sind:

  • der Benutzername im DMS muss im AD existieren
  • der Benutzername im DMS muss als Personenname im WFMS existieren
  • Vor-/Nachname im DMS und WFMS stimmen überein
  • die E-Mail-Adresse im DMS und WFMS stimmen überein
  • deaktivierte Benutzer sind ausschließlich Mitglieder der Gruppe STANDARD

Aus dem Prüfergebnis wird ein HTML-Bericht erzeugt, der in der Inhaltsvorschau angezeigt wird. Sofern eine Eigenschaft verletzt ist, gibt das Tool zudem einen Hinweis darüber, welche Schritte unternommen werden sollten, um das Problem zu lösen.

Beispiel-Ausgabe (anhand einiger absichtlich herbeigeführter Fehler):

Hat jemand hier vielleicht ähnliche Projekte umgesetzt/geplant oder weiß von vergleichbaren Projekten? Ich wäre insbesondere an Informationen daran interessiert, wie andere vergleichbare Situationen gelöst haben und welche Erfahrungen mit den Lösungsansätzen gesammelt wurden.

Ein paar Ergänzungen zur Umsetzung (falls dies für jemanden interessant ist):
Da ich derzeit keine IDE zur Verfügung habe, um Anwendungen zu schreiben, die per API auf enaio zugreifen, erfolgte die Umsetzung vollständig in enaio. Als „GUI“ habe ich eine Indexdatenmaske zweckentfremdet, über die das Tool konfiguriert und gestartet werden kann:

image

Die einzelnen Eigenschaften sind jeweils als VBScript-Klassen realisiert, die über zwei wichtige Funktionen verfügen: Eine Funktion AppliesTo(Username), die zurückgibt, ob die jeweilige Eigenschaft für den angegebenen Benutzernamen überhaupt anwendbar ist (nicht jede Eigenschaft gilt für jeden Benutzer) und eine Funktion Check(Username), die das Ergebnis der Prüfung zurückgibt (Beschreibung der Eigenschaft, Soll-Zustand, Ist-Zustand und ggf. Schritte zur Problemlösung). Ein Beispiel einer Eigenschaft:

Class Benutzer_existiert_mit_gleichem_Namen_als_Person_im_WFMS

	Public WfmsUsers

	Private Sub Class_Initialize()
	End Sub

	Public Function WithWfmsUsers(WfmsUsers)
		Set Me.WfmsUsers = WfmsUsers
		Set WithWfmsUsers = Me
	End Function

	Function AppliesTo(Username)
		AppliesTo = IsHumanUsername(Username) & UserAttribute(Username, "active")
	End Function

	Function Check(Username)
		Dim Description, Expected, Actual, Passed, Action
		Description = "Benutzer existiert mit gleichem Namen als Person im WFMS"
		Expected = "Der Benutzer " & Username & " existiert als Person im WMFS"
		
		If WfmsUsers.Contains(Username) Then
			Passed = True
			Actual = "Person " & Username & " existiert im WFMS"
		Else
			Passed = False
			Actual = Username & " ist keine Person im WFMS. "
			Action = "Importieren Sie den DMS-Benutzer " & Username & " ins WFMS." 
		End If
		
		Set Check = New PropertyTest.Create(Description, Expected, Actual, Passed, Action)
	End Function

End Class

Wichtig war mir insbesondere, neue Eigenschaft einfach ergänzen zu können: Es wird einfach eine neue Klasse erstellt. Ein Objekt der Klasse wird dann der Liste der zu prüfenden Eigenschaften hinzugefügt:

	Dim Properties: Set Properties = New E_List
	With Properties
		.Append New Benutzername_muss_im_AD_existieren.Create(AdUsers)
		.Append New Echter_Name_aus_DMS_und_AD_stimmen_ueberein.Create(AdUsers)
		.Append New Email_aus_DMS_und_AD_stimmen_ueberein.Create(AdUsers)
		
		.Append New Benutzer_existiert_mit_gleichem_Namen_als_Person_im_WFMS.WithWfmsUsers(WUsers)
		.Append New Echter_Name_aus_DMS_und_WFMS_stimmen_ueberein.Create(Nothing, WUserMap)
		.Append New Email_aus_DMS_und_WFMS_stimmen_ueberein.Create(Nothing, WUserMap) 
		
		.Append New Gesperrte_Nutzer_Sind_Nur_Mitglied_In_Gruppe_STANDARD
		.Append New Person_ist_Mitglied_der_Rolle_Mitzeichnung.MitMitgliedern(Wfms_MembersOfMitzeichnung)

	End With
3 „Gefällt mir“

Hallo @tordeu, aufgrund der #AKOS komme ich leider erst jetzt dazu, diese coole Lösung zu würdigen. Der Funktionsumfang und die Gedanken, die da hineingesteckt wurden, sind wirklich aussergewöhnlich!

Zwei Punkte sind mir aufgefallen, die aber nur Optionen sind: So wie es hier gezeigt ist, ist es nicht weniger gut, sondern nur anders, als wir es heute meistens umsetzen.

  • Als Server-Job hat man es in der Regel einfacher und könnte den Report bei Bedarf auch im Hintergrund regelmässig & massenhaft ablaufen lassen. Das setzt aber Infrastruktur voraus, die erst geschaffen werden muss, wie die Möglichkeit, solche Services zu installieren, monitoren etc.
  • Zur GUI: Der Output erfolgt bereits im Dashlet (also Web-Technologie) so könnte auch die Maske abgebildet werden. Der Rich-Client stellt dazu mehrere Optionen zur Verfügung:

Darf ich ausserdem fragen, wie es dazu kommt, dass WF- und DMS-Usernamen abweichen könn(t)en? Dieses Problem ist mir bisher nur theoretisch begegnete und ist für mich besonders spannend, da wir gerade an einem Team-Manager für enaio® arbeitete, welcher das Handling von Gruppen, Rollen, WF-Usern etc. perspektivisch vereinfachen soll.

Vielen Dank für die nette und ausführliche Rückmeldung, @rk! Den Vortrag auf der AKOS konnte ich mir wegen des parallelen Vortrags zur Schnittstellenentwicklung zwar nicht anschauen, aber ich konnte mich bereits im Vorfeld durch den Webcast begeistern lassen; letztlich habe ich darüber auch dieses Forum gefunden. Vielleicht passt es dann 2025.

Was eine automatische Erstellung von Reports angeht (wir haben noch einige weitere erstellt bzw. geplant), fehlt uns derzeit tatsächlich noch jegliche Infrastruktur. Derzeit bin ich auf die Verwendung von enaio Boardmitteln beschränkt. Daher sind die meisten Lösungen noch als Event-Script im enaio client hinterlegt. Lediglich für einzelne Fälle (Ansicht des Aktenplans und Übersicht der Führungskräfte/Teammitglied einzelner Organisationseinheiten) gibt es webbasierte Ansichten; mangels Infrastruktur/IDE usw. sind diese aber derzeit noch in Vanilla JS umgesetzt.

Für nächstes Jahr ist dann die Einrichtung eines Entwicklungssystems geplant, so dass dann mehr Möglichkeiten für die Umsetzung solcher Tools zur Verfügung stehen. Was die Automatisierung von Reports angeht, hatte ich zu Beginn noch an automatische Aktionen und enaio start gedacht. Allerdings schien das keine Lösung zu sein, um umfangreichere Skripte einzubinden. Und ich würde Lösungen in Python oder JavaScript/TypeScript der Entwicklung mit VBScript vorziehen.

Eine Verlagerung auf die Serverseite ist ein sehr guter Vorschlag. Derzeit setzen wir noch ausschließlich den enaio client ein; aber gerade um Lösungen nicht für den Client und Webclient parallel erarbeiten und pflegen zu müssen, sind webbasierte Lösungen sicher der bessere Weg. Vorstellen könnte ich mir auch die Entwicklung als „eigenständige“ Software, die dann über die APIs auf enaio zuzugreifen. So könnte man sie unabhängig vom Client nutzen.

Vielen Dank in jedem Fall für den Hinweis auf die Application.OpenURL; mit dem Ansatz habe ich mich bislang noch nicht auseinandergesetzt und auch nicht mehr im Hinterkopf gehabt. OpenBrowser muss leider noch bis zum Upgrade nächstes Jahr warten.

Was die WF-/DMS-Namen betrifft: Bei der Prüfung Benutzer_existiert_mit_gleichem_Namen_als_Person_im_WFMS ging es uns nicht mögliche Abweichungen der Usernamen. Wir wollten hiermit vielmehr Fälle aufdecken, in denen ein Nutzer im DMS angelegt, aber dann nicht ins WFMS übernommen wurde. Als Standard ist bei uns festgelegt, dass alle DMS-User ins WMFS übernommen und dort insb. der Rolle Mitzeichnung zugeordnet werden (die wir für den Mitzeichnungsworkflow nutzen). Letztlich soll damit sichergestellt werden, dass alle neuen Nutzer unmittelbar auch über den Mitzeichnungsworkflow beteiligt werden können bzw. in der Lage sind, selbst Workflows zu starten.

Und dann prüfen wir noch die Übereinstimmung von Vorname, Nachname und E-Mail-Adresse zwischen DMS und WFMS, um sicherzustellen, dass die Daten konsistent sind; insbesondere da der Vor-/Nachname beim Import nicht aus dem DMS übernommen werden (zumindest ist das bei uns in enaio 9.10 so).

Da die Daten auch mit Daten aus dem AD verglichen werden (das von einem anderen Team gepflegt wird), können wir so sicher sein, dass die Daten aller User in AD, DMS und WFMS konsistent sind und haben (hoffentlich) einige Fehlerquellen ausgeschlossen (z.B. Tippfehler in E-Mail-Adressen, die zu Problemen bei der Zustellung von E-Mails aus Workflows führen).

1 „Gefällt mir“