HCL Notes / Domino / Diverses > Entwicklung
Verständnisproblem "Ausführen im Namen von" ?
JayDee:
Folgendes Problem (Notes/Domino 11.0.1 FP3)
Nutzer hat nur Leserechte in einer DB, soll aber per Aktionsbutton in einer Ansicht eine Aktion ausführen können, die Schreibrechte erfordert (es wird im Hintergrund ein Dokument benötigt/erstellt, das gespeichert werden muss).
Dazu wird der gesamte LS-Code in einen Agenten gepackt, in dessen Sicherheits-Eigenschaften unter "Ausführen im Namen von" eine hochberechtigte Entwickler- bzw. Admin-ID angegeben ist, die auch in den entsprechenden Stellen im Sicherheitsabschnitt des Serverdoks eingetragen ist. Der Agent wird dann von der vom Nutzer ausgelösten Aktion gestartet.
Das "Ausführen im Namen von" greift aber nie, es kommt immer "keine Berechtigung".
Es ist dabei egal, wie der Agent von der Aktion aus gestartet wird: ob per LS, Formel, "einfache Aktion".
Mein zweiter Ansatz war, das Problem ohne Agent zu lösen, den LS-Code direkt in die Aktion zu legen, dem Nutzer das Leser-Recht zu lassen, die entsprechende Maske "public" zu machen und "Öffentliche Dokumente schreiben" in der ACL für den Nutzer zu erlauben. Auch das klappt nicht, beim doc.Save(...) kommt wieder die Meldung dass keine Berechtigung vorliegt.
Das Einzige was so klappt: manuell über das Notes-Menü "Erstellen .... <Maskenname>". Nur nützt mir das nichts.
Ich komm hier nicht weiter, aber vielleicht hab ich heute einfach Tomaten auf den Augen 8)
Als Workaround hab ich dem Nutzer erstmal Autorrecht + Häkchen "Dokumente erstellen" gegeben.
Peter Klett:
Call agent.RunOnServer?
Riccardo Virzi:
Die Funktion "Ausführen im Namen von" funktioniert meines Wissens nur, wenn der Agent als Background Agent vom Server ausgeführt wird. Ist aber schon ein paar Jahre her und ich bin mir nicht zu 100% sicher.
Die zweite Möglichkeit mit einer öffentlichen Maske, funktioniert wenn das Dokument über das Erstellen Menü aufgerufen wird. Ich kenne den Script Code nicht, gehe aber davon aus, daß ein neues leeres Dokument erstellt wird. Dann wird das Feld form mit dem Maskennamen belegt und versucht zu speichern. Das kann nicht funktionieren. Eine Notes Dokument mit einer öffentlichen Maske, wird nur dann öffentlich, wenn das Feld $PublicAccess auf "1" gesetzt wird. Wenn das Dokument über das Erstellen Menü erzeugt wird, dann sorgt der Notes Client aufgrund der Maskeneigenschaften dafür, daß das Feld $PublicAccess auf "1" steht.
Im Script Code gibt es 2 Möglichkeiten:
1. doc.ReplaceItemValue( "$PublicAccess", "1" )
2. doc.ComputeWithForm()
In dem Fall würde ich die erste Option nehmen.
Tode:
Call agent.RunonServer!
Riccardo hat es korrekt ausgeführt, warum das so ist: Für Agenten, die direkt vom Benutzer aufgerufen werden, gilt diese Property nicht. Du musst also Den User ScriptAgenten1 starten lassen, und der ruft über
Set agent = ses.CurrentDatabase.GetAgent( "AgentRunOnBehalf" )
Call agent.RunOnServer
einen weiteren Agenten auf, der dann im Kontext des Benutzers läuft, der in der Agentensecurity eingetragen ist.
JayDee:
Alles klar, vielen Dank für die Hinweise, das werde ich probieren.
Ich kann das aus der Doku nicht so herauslesen, daher bin ich immer wieder dankbar für die guten Tipps hier :)
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln