ACLs programmieren - Teil 5

Das Skript

Listing 1 zeigt das Skript, das für diese Analyse verwendet wird. Es ist relativ lang, was aber vor allem durch erforderliche Fallabfragen und eine Reihe von If-Else-Anweisungen bedingt ist, mit denen die Eigenschaften verarbeitet und in eine einfacher lesbare Form gebracht werden.

Sub Click(Source As Button)
Dim dbdir As New NotesDbDirectory ("domino7test1")
Dim db As NotesDatabase
Dim session As New NotesSession
Dim currdb As NotesDatabase
Dim doc As NotesDocument
Set currdb=session.CurrentDatabase
Dim acl As NotesACL
Dim entry As NotesACLEntry
Dim datetime As String
datetime = Date$ + Time$
Dim inetAccess As String
Dim consACLs As String
Dim roles As String
Set db = dbdir.GetFirstDatabase(DATABASE)
While Not(db Is Nothing)
Call db.Open("","")
Set acl = db.ACL
Select Case acl.InternetLevel
Case ACLLEVEL_NOACCESS:
inetAccess = "Kein Zugriff"
Case ACLLEVEL_DEPOSITOR:
inetAccess = "Ersteller"
Case ACLLEVEL_READER:
inetAccess = "Leser"
Case ACLLEVEL_AUTHOR:
inetAccess = "Autor"
Case ACLLEVEL_EDITOR:
inetAccess = "Editor"
Case ACLLEVEL_DESIGNER:
inetAccess = "Designer"
Case ACLLEVEL_MANAGER:
inetAccess = "Manager"
End Select
If acl.UniformAccess Then
consACLs = "Ja"
Else
consACLs = "Nein"
End If
Set entry = acl.GetFirstEntry
While Not (entry Is Nothing)
Set doc = New NotesDocument(currdb)
doc.Form = "ACLinfo"
doc.Server="domino7test1"
doc.Datenbank=db.FileName
doc.Datum=datetime
doc.Name = entry.Name
doc.InternetZugriff = inetAccess
doc.ConsistentACLs = consACLs
Select Case entry.Level
Case ACLLEVEL_NOACCESS:
doc.Zugriffslevel = "Kein Zugriff"
Case ACLLEVEL_DEPOSITOR:
doc.Zugriffslevel = "Ersteller"
Case ACLLEVEL_READER:
doc.Zugriffslevel = "Leser"
Case ACLLEVEL_AUTHOR:
doc.Zugriffslevel = "Autor"
Case ACLLEVEL_EDITOR:
doc.Zugriffslevel = "Editor"
Case ACLLEVEL_DESIGNER:
doc.ZUgriffslevel = "Designer"
Case ACLLEVEL_MANAGER:
doc.Zugriffslevel = "Manager"
End Select
If entry.IsPerson Then
doc.Benutzertyp = "Person"
Else
If entry.IsGroup Then
doc.Benutzertyp = "Gruppe"
Else
doc.Benutzertyp = "Server"
End If
End If
If entry.CanCreateDocuments Then
doc.DocCreate = "Ja"
Else
doc.DocCreate = "Nein"
End If
If entry.CanDeleteDocuments Then
doc.DocDelete = "Ja"
Else
doc.DocDelete = "Nein"
End If
If entry.CanCreatePersonalAgent Then
doc.PersonalAgent = "Ja"
Else
doc.PersonalAgent = "Nein"
End If
If entry.CanCreatePersonalFolder Then
doc.PersonalFolder = "Ja"
Else
doc.PersonalFolder = "Nein"
End If
If entry.CanCreateSharedFolder Then
doc.SharedFolders = "Ja"
Else
doc.SharedFolders = "Nein"
End If
If entry.CanCreateLSOrJavaAgent Then
doc.LSAgents = "Ja"
Else
doc.LSAgents = "Nein"
End If
If entry.CanReplicateOrCopyDocuments Then
doc.DocRepl = "Ja"
Else
doc.DocRepl = "Nein"
End If
If entry.IsPublicReader Then
doc.PubRead = "Ja"
Else
doc.PubRead = "Nein"
End If
If entry.IsPublicWriter Then
doc.PubWrite = "Ja"
Else
doc.PubWrite = "Nein"
End If
roles = ""
Forall r In entry.Roles
roles = roles + r
End Forall
doc.Roles = roles
Call doc.Save(True,True)
Set entry = acl.GetNextEntry(entry)
Wend
Set db = dbdir.GetNextDatabase
Wend
End Sub

Die Grundstruktur des Skripts ist sehr einfach. Für jede Datenbank werden innerhalb einer Schleife über alle Datenbanken im Datenbankverzeichnis allgemeine ACL-Informationen ausgelesen, bevor in einer weiteren Schleife die ACLEinträge durchlaufen werden. Für jeden ACLEintrag wird ein Dokument erstellt, in dem alle Informationen gespeichert werden.

Dadurch sammeln sich bei jedem Durchlauf einige hundert Dokumente an, weil es pro Datenbank mehrere ACL-Einträge gibt. Bei 40 Datenbanken mit durchschnittlich fünf Einträgen werden beispielsweise 200 Dokumente erzeugt.