Hallo Ricardo,
beim Prüfen der Zugriffsrechte wird die ALC der Datenbank herangezogen. Infos findest dazu in der Hilfe unter "NotesACL", "NotesACLEntry" und "Level (NotesACLEntry)"
Dabei macht es einen Unterschied, ob eine Person oder auch Gruppe explizit in der ALC genannt ist oder implizit (User ist nur Mitglied in einer Zugriffsgruppe, die evtl. Mitglied einer Zugriffsgruppe ist).
Für explizit genannte Benutzer und Gruppen kannst Du das Folgende verwenden:
Dim nss As New NotesSession
Dim db As NotesDatabase
Dim acl As NotesACL
Dim aclEntry As NotesACLEntry
Dim UName As NotesName
Dim Rolle As String
Set db = nss.CurrentDatabase
Set acl = db.acl
Rolle = "[Admin]"
'+++ Prüfen einer explizit genannten Person
Set UName = nss.CreateName(nss.UserName) ' aktueller Benutzer
Set aclEntry = acl.GetEntry(UName.Canonical)
oder
'+++ Prüfen einer explizit genannten Gruppe
Set UName = New NotesName("Admin/ACME/DE")
Set aclEntry = acl.GetEntry(UName.Common)
'Prüfen auf generelle Zugriffsrechte
If aclEntry.Level = acllevel_manager Then
Messagebox"Ist Manager"
Else
Messagebox"Ist nicht Manager"
End If
'Prüfen auf Mitgliedschaft in einer bestimmten Rolle
If aclEntry.IsRoleEnabled(Rolle) Then
Messagebox"Ist in Rolle " + Rolle
Else
Messagebox"Ist nicht in Rolle " + Rolle
End If
Je nachdem, wie in der Zugriffskontrolliste der Datenbank die Gruppen benannt sind, ist zu beachten, dass bei einer Person der canonische Name verwendet werden muss (hier: Max Mustermann/ACME/DE), bei einer Gruppe der "einfache" (common) Name (hier: Admin).
Bei impliziten Abfragen muss man nicht direkt auf die ACL zugreifen.
Dim ss As New NotesSession
Dim db As NotesDatabase
Dim UName As NotesName
Dim Rolle As String
Dim Rollen As Variant
Set db = ss.CurrentDatabase
'+++ Prüfen einer implizit genannten Person
Set UName = nss.CreateName(nss.UserName) ' aktueller Benutzer
oder
'+++ Prüfen einer implizit genannten Gruppe
Set UName = New NotesName("Admin/ACME/DE")
Rolle = "[Admin]"
'+++ Prüfen einer Person in einer Gruppe der ACL
'Prüfen auf generelle Zugriffsrechte
If db.QueryAccess(UName.Canonical) = acllevel_manager Then
Messagebox"Ist Manager"
Else
Messagebox"Ist nicht Manager"
End If
'Prüfen auf Mitgliedschaft in einer bestimmten Rolle
Rollen = db.QueryAccessRoles(UName.Canonical)
If Isnull(Arraygetindex(Rollen, Rolle)) Then
Messagebox"Ist nicht in Rolle " + Rolle
Else
Messagebox"Ist in Rolle " + Rolle
End If