Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: TheHessian am 13.12.05 - 12:03:41
-
Hi!
Ich suche eine Funktion oder Programmierlösung in LotusScript mit der ich eine Liste aller Gruppen eines Users im PublicAdressBook von LotusDomino bekomme.
Kennt da jemand eine elegante Lösung?
Wäre für Vorschläge dankbar!
Gruß
Marcus
-
Tja, zuerst könntest Du über DB.Search( ) mit einem in etwa so aussehenden Suchstring:
Form = "Group" & @IsMember( @UserName ; Members )
alle Gruppen- Dokumente finden, in denen der User direkt drin steht.
Ab hier wird's Rekursiv:
Mit dem Ergebnis musst Du jetzt theoretisch wieder suchen, um alle Gruppen zu finden, in denen Deine gefundenen Gruppen drin stehen...usw.
Eventuell hilft Dir (in einer reinen Server- Umgebung) auch die Funktion "@UserNamesList" in einem Evaluate weiter, aber eben nur dann, wenn es sich beim User um den aktuell angemeldeten Benutzer handelt...
Gruß
Tode
-
Die @UserNamesList Funktion ist ja wunderbar ...
aber ...
ich wollte das ganze in LotusScript abfrühstücken.
Leider finde ich kein Äquivalent zu der Funktion in LS.
:(
-
Wie Torsten schon schrieb: Nimm' Evaluate.
Bernhard
-
Würde ich nehmen, wenn ich in ein Document hätte - ich bin aber in einem Navigator
-
In wiefern hindert Dich der Navigator daran? Kannst Du das mal näher spezifizieren?
Andreas
-
Oder anders gefragt: Wozu brauchst Du ein Dokument ?
Bernhard
-
Evalute braucht ein NotesDocument als 2. Argument: NotesSession.Evalute( "", doc )
Ich will aber in einem Navigator, an einer Schaltfläche bestimmen, ob die Funktion freigegeben ist für den aktuellen Benutzer oder nicht. Habe in einer Datenbank einen "Startbildschirm" (Navigator) eingebaut. Da hab ich eben kein Document als Referenz fürs Evalute.
Anhand der ACL-Rolen soll entschieden werden, ob ein User eine Funktion ausüben darf oder nicht. Wenn nun aber der User nicht explizit in der ACL drin steht, sondern nur die Gruppe, in der er Mitglied ist, muss ich doch nun wissen, in welchen Gruppen der User ist. Aber das find ich nirgends.
ACL.GetEntry( Session.CommonUsername ) liefert eben nur dann einen Entry, wenn der User explizit in der ACL aufgeführt ist. Aber wir können nicht alle 100 User in die ACL aufnehmen. Macht ja auch eigentl. keinen Sinn ...
Die Gruppen aus dem Globalen Adressbuch sind aber in die ACL eingetragen und abhängig von der Gruppenzuordnung des Users will ich nun die Rolle prüfen.
Verständlich? ;)
-
Braucht es nicht - das Object ist optional.
Bernhard
-
Wozu denn eigentlich der Austand mit der Gruppen-Abfrage?
Wenn's rein um die Rollen des aktuellen User geht, nimm doch die Funktion @UserRoles.
Hier findest du dann auch noch eine Script-Lösung: Prüfung der Zuordnung von Rollen mit Script (http://www.free.dominoserver.de/computer/noteslibrary.nsf/d2d59a3d7fc73a2bc1256a6900638352/c91df359b64b39f1c1256e1600611883!OpenDocument)
Axel
-
Aber wenn es hier um UserRollen, die in der ACL vergeben sind, geht, warum dann nicht mit @UserRoles? Das wäre doch auch wesentlich weniger aufwändig zu programmieren, da ja nach dem Feststellen der Gruppenmitgliedschaften eben diese innerhalb der ACL abgeprüft werden müssten, welche Rolle evtl. vergeben ist.
-
und wieder mal ein Fall, wo man mit einer Zeile auf das Problem hätte antworten können, wenn der Frager beschrieben hätte, was er will, und nicht so ne allgemeingültige Frage gestellt hätte.
Wenn Ihr Euch angewöhnt, ganz kurz zu skizzieren, um welches Szenario es sich handelt, und was Ihr genau erreichen wollt, dann wird Euch
a) viel schneller geholfen werden.
und
b) auch geholfen, wenn Ihr möglicherweise mit Eurem Ansatz auf dem Holzweg seid.
Was Du willst sind in Script 2 Zeilen code (wenn man die Declarations mitzählt):
Dim roles as Variant
roles = EValuate( "@UserRoles" )
auf diese Roles kannst Du dann ein ArrayGetIndex o.ä. loslassen um festzustellen, ob eine bestimmte dabei ist.
Gruß
Tode
-
hmmm ...
da hab ich wohl zu umständlich gedacht ;D
Vielen Dank für die Tipps!
Mit dem Evalute auf @UserRoles hats geklappt.
Ich arbeite bisher sogut wie gar nicht mit "Evaluate"
Danke nochmal!