Domino 9 und frühere Versionen > Administration & Userprobleme

kSpam - Empfänger soll eigenen Spam administrieren

<< < (3/4) > >>

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