[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[]) |
| |
| |
| |
| .... |
| |
| rightsUser.hasCreateDocuments |
2. Möglichkeit wäre stateless:
| RightsUser rightsUser = new RightsUser(NotesDatabase db) |
| |
| rightsUser.hasCreateDocuments(userNamesList()) |
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