Domino 9 und frühere Versionen > Administration & Userprobleme
kSpam - Empfänger soll eigenen Spam administrieren
DrNotes:
--- Zitat von: Driri am 23.11.06 - 15:18:47 ---Vermutlich steht eine Rolle oder so für die Admins in einem zusätzlichen Leserfeld. Dann stört es auch nicht, wenn Du das $Readers löschst.
Warum soll das $Readers denn überhaupt gelöscht werden ?
--- Ende Zitat ---
Im Anhang der Code des Agenten:
Sub Initialize
Const sMailbox="mail.box"
Const sMailGood="mailgood.nsf"
Dim uiw As New NotesUIWorkspace
Dim sess As New NotesSession
Dim dbCurrent As NotesDatabase
Set dbCurrent=sess.CurrentDatabase
Dim docProfile As NotesDocument
Set docProfile=dbCurrent.GetProfileDocument("Configuration") '--da steht nur der Servername drinnen
Dim sServer As String
sServer=docProfile.KS_Server(0)
If sServer="" Then
Messagebox "Please create a Configuration Profile !"
Exit Sub
End If
Dim dbMailbox As New NotesDatabase(sServer,sMailbox)
Dim dbMailGood As New NotesDatabase(sServer,sMailGood)
Dim docMailbox As NotesDocument
Dim docMailGood As NotesDocument
Dim docOld As notesdocument
Dim col As NotesDocumentCollection
Dim doc As NotesDocument
Set col=dbCurrent.UnprocessedDocuments
Set doc=col.GetFirstDocument
While Not (doc Is Nothing)
Call doc.RemoveItem("$Readers")
doc.flagStatus=3
Call doc.Save(True,False,True)
Set docMailbox=doc.CopyToDatabase(dbMailbox)
Set docGood=doc.CopyToDatabase(dbMailGood)
Set doc=col.GetNextDocument(doc)
Wend
Call uiw.ViewRefresh
End Sub
Soll ich dem Mitarbeiter mittlels LS - hier im Agenten - kurz Admin-Rechte geben, ihn sozusagen nur zum Löschen des $Reader-Feldes in die "kSpamAdministrators"-Gruppe geben, oder gibts einen besseren Vorschlag?
Driri:
Okay, jetzt versteh ich erst, wo das Problem liegt.
Wenn das $Readers im Dokument erhalten bleibt, ist die Kopie des Dokumentes auch entsprechend eingeschränkt.
Ich vermute, daß es ein zweites Leserfeld gibt, so daß beim Löschen von $Readers der User den Zugriff auf das Dokument verliert. Dadurch schlägt dann natürlich das CopyToDatabase fehl.
So adhoc fallen wir nur zwei Möglichkeiten ein :
a) Vorausgesetzt es gibt noch weitere Leserfelder, schießt Du diese alle weg, kopierst das Dokument und setzt dann von mir aus wieder ein Leserfeld mit der Admingruppe oder so, damit nicht jeder das Ursprungsdokument sehen kann.
b) Du baust einen zweiten Agenten, der mit Serverberechtigung läuft und der den Kopiervorgang startet. Dafür kannst Du diesem Agenten dann die DocID übergeben.
DrNotes:
--- Zitat von: Driri am 23.11.06 - 16:17:23 ---
b) Du baust einen zweiten Agenten, der mit Serverberechtigung läuft und der den Kopiervorgang startet. Dafür kannst Du diesem Agenten dann die DocID übergeben.
--- Ende Zitat ---
Hallo Driri,
wie meinstn das mit dem serverbasierten Agenten?.
Ich habe jetzt obigen Code in einen Agenten verpackt, diesen mit der Server-ID signiert, und mit dem Button mittels ToolsRunMacro... auf diesen Agenten verwiesen.
Leider funktioniert es nicht!
Ich habe schon soviele Varianten durchprobiert, dass ich mittlerweile nicht mehr weiss, was ich eventuell noch probieren könnte.
Hat vielleicht irgendjemand von den vielen Spezialisten in diesem Forum einen heissen Tip für mich? Ich bin jetzt echt schon total verzweifelt, weil alles - bis auf das Removeitem ("$Readers") - funktioniert und ich die Routine vorher nicht einspielen kann.
Driri:
Ich setze jetzt einen Domino 6 vorraus.
Dann kannst Du in den Eigenschaften des Agenten das "Run on behalf of" einstellen. Wenn Du dort den Server einträgst, läuft der Agent bei Ausführung mit der Berechtigung des Servers. Dieser sollte ja trotz entferntem Leserfeld noch an das Dokument herankommen.
Du rufst den Agent dann auf mit
docid = doc.NoteID
...
-Leserfeld entfernen-
...
Call agent.RunOnServer(docid)
Im Agenten bekommst Du das Dokument, indem Du den Parameter des Agents abfragst :
Set doc = db.GetDocumentByID(agent.ParameterDocID)
...
-Kopieren-
...
Mist, hab gerade gesehen, daß das das R5-Forum ist, da geht das mit RunOBehalfOf nicht. Ich würde das trotzdem so versuchen und den Agent dann mit Server-ID signieren.
Wenn ich die Hilfe richtig deute, läuft der Agent bei Aufruf vom Client per RunOnServer mit den Rechten des Signierers.
--- Zitat ---If a Notes client invokes RunOnServer, security is through the signer of the agent.
--- Ende Zitat ---
DrNotes:
--- Zitat ---
Im Anhang der Code des Agenten:
Sub Initialize
Call doc.RemoveItem("$Readers")
End Sub
--- Ende Zitat ---
Für alle, die es interessiert - Problem gelöst.
Ich habe anstatt
Call doc.RemoveItem("$Readers")
Call dc.ReplaceItemValue ("$Readers","*")
verwendet.
Jetzt gehts.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln