HCL Notes / Domino / Diverses > Entwicklung
Full Access per LotusScript abfragen
Riccardo Virzi:
Ich möchte in einem LotusScript abfragen, ob der Benutzer Full Access aktiviert hat, bevor ich mit meiner Funktion starte. Falls nein, soll die Funktion mit einer Meldung abbrechen.
In den Script Klassen habe ich nichts gefunden. Habe ich das übersehen oder geht das nicht?
CarstenH:
Ich würde simpel einen Zugriff versuchen, der nur mit Full Access möglich ist und den zu erwartenden Fehler mit der von dir gewünschten Meldung abfangen.
HTH
Carsten
Richard Eder:
Vielleicht ist das brauchbar? @ServerAccess([FULLACCESS];@UserName)
Mit einem Evaluate sollte das dann auch in LS gehen:
Sub Initialize
Const FORMULA= |@ServerAccess([FULLACCESS];@UserName)|
Dim vRet As Variant
vRet = Evaluate(FORMULA)
End Sub
FrankLU:
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:
--- Code: --- 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
--- Ende Code ---
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.
--- Code: --- 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
--- Ende Code ---
eknori (retired):
--- Zitat von: Richard Eder am 03.06.22 - 12:25:22 ---Vielleicht ist das brauchbar? @ServerAccess([FULLACCESS];@UserName)
--- Ende Zitat ---
Das prüft aber nur, ob der User generell FULLACCESS Rechte hat, nicht aber, ob er auch mit den Rechten unterwegs ist.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln