[CREATEDOCUMENTS]
[DELETEDOCUMENTS]
[CREATEPERSONALAGENTS]
[CREATEPERSONALFOLDERSANDVIEWS]
[CREATELOTUSSCRIPTJAVAAGENTS]
[CREATESHAREDFOLDERSANDVIEWS]
[READPUBLICDOCUMENTS]
[WRITEPUBLICDOCUMENTS]
[REPLICATEORCOPYDOCUMENTS]
Hab grad was gelesen, dass eventuell darauf passt.
Wie soll man diese ganzen Rechte schnell abrufbar im Objekt haben?
Ich gehe davon aus, dass in einer ersten Phase die Rechte des Users aufgebaut werden. Und dann später abgerufen werden.
ClientCode wäre dann:
RightsUser rightsUser = new RightsUser(NotesDatabase db)
call rightsUser.init (UserNamesList[]) ' als Array ' ginge auch im Konstruktor, aber ich mag nicht, wenn zuviel Operationen durch den Constructor initiiert werden.
' das Objekt hält den state aller Berechtigungen dieses Users
....
' und später:
rightsUser.hasCreateDocuments ' gibt boolean-int zurück.
2. Möglichkeit wäre stateless:
RightsUser rightsUser = new RightsUser(NotesDatabase db)
rightsUser.hasCreateDocuments(userNamesList()) ' als array.
Bei 1. (statefull) wäre die 2., 3., 4., etc. Abfrage der hasThisRight-Methode sehr schnell, bei 2. (stateless) langsamer.
Eine Möglichkeit die statefull Lösung zu implementieren wäre, dass jedem dieser Rechte eine Primzahl zugeordnet wird und dann daraus ein Wert errechnet wird.
z.B.
if (ACLEntry.hasRight(CreateDocuments) AND (allRightsLong MOD 2 = valAllRights / 2) then
allRightsLong = allRightsLong * 2
end if
if (ACLEntry.hasRight(DeleteDocuments) AND (allRightsLong MOD 3 = valAllRights / 3) then
allRightsLong = allRightsLong * 3
end if
if (ACLEntry.hasRight(CREATEPERSONALAGENTS) AND (allRightsLong MOD 5 = valAllRights / 5) then
allRightsLong = allRightsLong * 5
end if
Jedem dieser Rechte ist eine Primzahl zugeordnet. Wenn später beider Abfrage gilt:
(allRightsLong MOD 2 = AllRightsLong / 2) dann wurde später dieses Recht in allRightsLong reingeschrieben. Der 2. Ausdruck hinter dem AND während des Ermittelns der Rechte ist nur dafür da um Rechte nicht doppelt in allRightsLong zu schreiben.
Solange man für jedes Recht eine Primzahl nimmt, geht das.
Auf etwas ähnliches (mit bitmask) wird hier verwiesen.
http://jaredtech.blogspot.com/2005/07/how-integer-masked-permission-works.htmlWeiss nicht, ob das mit LotusScript geht.
Gruß Axel