Function DE Version 12.11

@ACLGetEffectiveUserAccess

ACL Database NotesAdmin NotesSystem

Syntax

@ACLGetEffectiveUserAccess(hACL;hNamesList;UserLevel;UserPrivileges);
@ACLGetEffectiveUserAccess(hACL;hNamesList;UserLevel;UserPrivileges;UserPrivilegesNames);

Beschreibung

Diese @Function ermittelt anhand einer zuvor eingelesenen ACL und einer Namensliste den effektiven Zugriff eines Benutzers auf die betreffende Datenbank.
Dabei werden sowohl der direkt für den Benutzer eingetragene Zugriff als auch seine direkten und indirekten Gruppenzugehörigkeiten berücksichtigt.
Die Funktion liefert den daraus resultierenden effektiven Zugriffslevel sowie die für den Benutzer wirksamen ACL-Privileges und ACL-Flags zurück.
Optional können zusätzlich die Namen der wirksamen Privileges bzw. Rollen zurückgegeben werden.
Als Eingabe werden ein mit @ReadACL erzeugter VSPECHACL-Handle sowie ein VSPECHNAMELIST-Handle der über @ResolveUserGroups erzeugt werden kann benötigt.

VSPECHACL hACL:
Ein VSPECHACL-Handle wie er von @ReadACL zurückgeliefert wird.

VSPECHNAMELIST hNamesList:
Ein VSPECHNAMELIST-Handle wie er von @ResolveUserGroups zurückgeliefert wird.

NUMBER UserLevel:
6=(Manager)   Manager
5=(Developer)   Entwickler
4=(Editor)   Editor
3=(Author)   Autor
2=(Reader)   Leser
1=(Depositor)   Archivar
0=(No Access)   Kein Zugriff

TEXT UserPrivileges:
Die Privilegien und ACL-Flags des Users. Die einzelnen Previlegien bzw. ACL-Flags werden durch Kommata getrennt.
Die ersten 5 ACL-Privileges sind für pre Notes V3 Datenbanken reserviert.
Diese können zwar weiterhin hierüber abgefragt werden und über die Engine grundsätzlich auch gesetzt werden, sollten aber nicht mehr verwendet werden (legacy support only!).

Rollen/Previlegien:
1-5   pre V3 Privileges
6-80 >V3 Roles

ACL-Flags:
ACC Author Can Create new documents
CPA Create Personal Agent erlaubt
CPF Create Personal Folder/View erlaubt
CD Can Delete (bei einem Level >= Author)
CF Create Folder erlaubt
CLS Create Lotus Script erlaubt
ASRV Admin-Server Eintrag
SRV Server Eintrag
PRS Personen Eintrag
GRP Gruppen Eintrag
RPD Read Public Documents
WPD Write Public Documents
MDA Der Benutzer kann keine monitors für diese Datenbank registrieren
NRC Der Benutzer kann diese Datenbank weder kopieren noch replizieren
ARA Der Admin-Server kann Reader- oder Author-Felder modifizieren

TEXTLIST UserPrivilegesNames:
Die Namen der für diesen User gesetzen Privilegien bzw. Rollen.

Return:
Im Fehlerfall liefert die @Function @Error zurück, andernfalls TRUE.

Beispiel: @ACLGetEffectiveUserAccess(hACL;hNamesList;UserLevel;UserPrivileges;UserPrivilegesNames);

dbPath:="TEST\\TESTDB1.NSF";
UserToResolve:="CN=Karl Mustermann/O=ACME/C=DE";

Ret:=@ResolveUserGroups(UserToResolve;hNamesList);
dbh:=@OpenDB(dbPath);
hACL:=@ReadACL(dbh);
dbh:=@CloseDB(dbh);

Ret:=@ACLGetEffectiveUserAccess(hACL;hNamesList;UserLevel;UserPrivileges;UserPrivilegesNames);
Ret:=@DestroyNameList(hNamesList);
hACL:=@ReleaseACL(hACL);

@LogReport(UserLevel);
@LogReport(UserPrivileges);
@LogReport(UserPrivilegesNames);

Das Beispiel ermittelt zunächst für den Domino-Benutzer "CN=Karl Mustermann/O=ACME/C=DE" die vollständige Namensliste einschließlich seiner direkten und indirekten Gruppenzugehörigkeiten.
Anschließend wird die Datenbank TEST\TESTDB1.NSF geöffnet, eine In-Memory-Kopie ihrer ACL erzeugt und die Datenbank wieder geschlossen.
Mit @ACLGetEffectiveUserAccess werden anhand der ACL und der Namensliste der effektive Zugriffslevel des Benutzers, seine wirksamen ACL-Privileges und ACL-Flags sowie die für diesen Benutzer wirksamen Previlegien-Namen ermittelt. Danach werden die verwendeten Handles wieder freigegeben und die ermittelten Werte im APILOG protokolliert.