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