ACLs programmieren - Teil 4

Mit dem im vorliegenden Beitrag vorgestellten Code wird detailliert gezeigt, wie Änderungen an ACLs durchgeführt werden. Dabei werden die abgefragten Daten in Änderungen von ACLs umgesetzt, indem auf dieser Basis neue ACL-Einträge erstellt werden. Die Vorgehensweise wird Schritt für Schritt erläutert.

Um die eingegebenen Informationen aus der Datenbank zu verarbeiten und umzusetzen, werden Methoden und Eigenschaften der Klasse Notes- ACLEntry genutzt.

Die Änderung von ACLs

Im vorangegangenen Teil der Serie wurde die Struktur der Anwendung vorgestellt. In dieser können Datenbanken, Benutzer und Zugriffsniveaus ausgewählt werden. Außerdem können spezielle Berechtigungen angegeben werden. Von den drei Schaltflächen in der Anwendung wird allerdings bisher erst eine genutzt, mit der man die vorgenommenen Informationen in der Datenbank speichern kann. Die beiden anderen Schaltflächen zur unmittelbaren und zur späteren Ausführung der Änderungen sind dagegen noch nicht mit Code belegt worden. Der Code für diese beiden Schaltflächen wird sich relativ stark ähneln, weil der Unterschied nur darin liegt, dass einmal die aktuellen Informationen und einmal die in der Datenbank gespeicherten Informationen – Letztere in einer Schleife – verarbeitet werden.

Modifikationen an der Maske

Um den Code möglichst einfach zu gestalten, gibt es noch einige Modifikationen an der Maske. Zum einen wurden die Optionsfelder so verändert, dass mit einem Feld und einer daraus generierten Liste gearbeitet wird. Das ist einfacher, als mehrere Optionsfelder zu verwenden, die jeweils nur zu Listen mit einem Eintrag führen.

Außerdem wird für die versteckten Felder im unteren Bereich nun mit Textfeldern gearbeitet, die in der Handhabung einfacher sind und für den Zweck der Anwendung ausreichen.

Der Code für eine Änderung

Sub Click(Source As Button)
Dim sess As New NotesSession
Dim ws As NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set ws = New NotesUIWorkspace
Set uidoc = ws.CurrentDocument
Call uidoc.Save
Dim doclist As NotesView
Dim doc As NotesDocument
Dim dbcurr As NotesDatabase
Set dbcurr = sess.CurrentDatabase
Set doclist = dbcurr.getview("Standardansicht")
Set doc = doclist.GetLastDocument
Dim db As New NotesDatabase("domino7test1",doc.datei(0))
Dim acl As NotesACL
Set acl = db.ACL
Dim entry As NotesACLEntry
Dim zugriffslevel As Integer
Select Case doc.Zugriffsniveau(0)
Case "Manager":
zugriffslevel = ACLLEVEL_MANAGER
Case "Entwickler":
zugriffslevel = ACLLEVEL_DESIGNER
Case "Editor":
zugriffslevel = ACLLEVEL_EDITOR
Case "Autor":
zugriffslevel = ACLLEVEL_AUTHOR
Case "Leser":
zugriffslevel = ACLLEVEL_READER
Case "Ersteller":
zugriffslevel = ACLLEVEL_DEPOSITOR
Case "Kein Zugriff":
zugriffslevel = ACLLEVEL_NOACCESS
End Select
Set entry = New NotesACLEntry (acl, doc.benutzer(0), zugriffslevel)
Forall optionswert In doc.agentcreate
If optionswert = "Private Agenten erstellen" Then
entry.CanCreatePersonalAgent = True
End If
If optionswert = "Private Ordner und Ansichten erstellen" Then
entry.CanCreatePersonalFolder = True
End If
If optionswert = "Gemeinsame Ordner und Ansichten erstellen" Then
entry.CanCreateSharedFolder = True
End If
If optionswert = "LotusScript und Java Agenten erstellen" Then
entry.CanCreateLSOrJavaAgent = True
End If
If optionswert = "Erstellen öffentlicher Dokumente" Then
entry.CanCreateDocuments = True
End If
If optionswert = "Löschen öffentlicher Dokumente" Then
entry.CanDeleteDocuments = True
End If
If optionswert = "Replizieren oder Kopieren öffentlicher Dokumente" Then
entry.CanReplicateOrCopyDocuments = True
End If
End Forall
Call acl.Save
doc.verarbeitet = "True"
Dim dateTime As String
dateTime = Date$ + Time$
doc.verarbeitungsdatum = dateTime
Call doc.save (True,False)
Call uidoc.close
End Sub