Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Mitch am 04.06.03 - 13:38:12
-
Hallo Forum,
ich habe folgendes Problem:
Ich habe eine Datenbank in der User Dokumente erstellen und dann zur weiteren Bearbeitung an das System abgeben.
D.h. dem User werden die Autorenrechte auf dieses Dok entzogen und jemand anderes bekommt ebendiese Rechte. Kein Problem.
Leider können die User diese Dokumente noch sehen (muss sein) - und damit auch per Copy und Paste vervielfältigen. Da auf die Dokumente später Prämien gezahlt werden ist dies ganz böse (Mal abgesehen von allen anderen ärgerlichen Sachen wie Redundanzen, Statistikverfälschung und so weiter).
Wie kann ich also verhindern das so etwas passiert?
Es würde mir reichen wenn ich das Einfügen von Dokumenten für alle User ohne die Rolle [ADMINISTRATION] verhindern könnte.
Leider gibt es kein "OnPaste"-Event im Datenbank-Script und die Agenten-Startoption "Wenn Dokumente eingefügt werden" ist eigentlich eher "Nachdem Dokumente eingefügt wurden". Oder ich mache es falsch...
Meine zwei Versionen eines Agenten der das Einfügen von Dokumenten (der Einfachheit wegen: GENERELL) verhindern soll:
Die einfache @Funktionen-Verision - einfach abbrechen:
@Return("")
-> Geht nicht. Agent startet erst nach dem Einfügen?!
Die Scriptversion, versuchen das ContextDokument zu löschen:
Dim session As New NotesSession
Dim docContext As NotesDocument
Set docContext = session.DocumentContext
Call docContext.Remove(True)
-> Die funktioniert nicht da ContextDokumente nicht löschbar sind, aber selbst wenn: Der User hat ja keine Autorenrechte mehr, er könnte es eh nicht löschen.
Also: Hilfe! Hat wer eine Idee?
-
Im Querypatste-Event der Views kann continue = false gesetzt werden. Dann noch eine Meldung, das keine Dokumente per Paste eingefugt werden dürfen...
Muss aber in jeder View gemacht werden.
Viele Grüße
ghost
-
Was noch einfacher ist ein einfacher Agent, getriggert auf "When documents are pasted" mit folgendem Code :
SELECT @All;
@DeleteDocument
Meff
-
@Meff: Leider fehlen dem User die Autorenrechte um das zu tun...
@ghost: Danke, das ist eine anstrengende (ca. 150 Views in 3 Datenbanken) aber funktionierende Möglichkeit. Die werde ich wohl nehmen... ::)
-
Für was fehlen dem User die Autorenrechte ? Die hat er doch, er kann doch grundsätzlich Dokumente in der Datenbank erstellen, er kann nur das bestehende Dokument nicht verändern, oder habe ich da jetzt was falsch verstanden ?
Meff
-
warum sollte das nicht gehen, was Meff vorgeschlagen hat? Der Agent läuft servergesteuert und nicht mit dem Recht des Users. oder bring ich was durcheinander?
-
Danke Rob, dass kommt noch obendrei dazu...
@Mitch : Hast Du das mal getestet, dass das nicht funktioniert. Würde mich wirklich interessieren.
Meff
-
@Meff, Rob Green:
Der funktioniert hier nicht. Ich habe den getestet. Es sieht aus wie folgt:
1.) User erstellt Dokument
2.) User reicht Dokument ein
3.) User wird aus dem Autoren-Feld entfernt!!! Er verbleibt nur im Leserfeld
4.) User kopiert Dokument das er lesen aber nicht ändern darf
5.) Agent startet mit Userrechten! Meldung "Sie dürfen keine Dokumente löschen in denen Sie nciht als zulässiger Autor geführt sind"
Oder kann ich dem Agenten sagen er soll mit Server-Rechten laufen? Er ist unterzeichnet (zuletzt bearbeitet) mit meiner Entwickler ID die definitiv alles löschen kann was ich will...
-
Ich merke, ich mache zuviel mit R6, da schaut das nämlich alles ein wenig anders aus.
Danke für die Info.
Meff
-
korrekte Einwand, ich habe unter R6 natürlich die tolle Möglichkeit einzustellen, daß der Agent "in behalf of"... läuft (geiles Feature). Da ist das natürlich kein Thema.
In R5 wird dieser Agent im Namen des Users ausgelöst und da beißt es sich. Heißt? Ändere den Agent auf zyklisch alle x- Stunden. Ich kenne allerdings nun Eure Applikation und den Usecase nicht, doch glaube ich, daß sicher nicht nach Einstellung eines neuen Docs umgehend Zahlprozesse ausgelöst werden, sondern wohl in einem Batch artigen Prozess sehr viel später. Bis dahin hat ein zeitlicher Agent Gelegenheit aufzuräumen.
@Meff: ;D ;D ;D so schnell kanns gehen, ein Monat R6 und R5 ist vergessen.
-
R6 kanns...
Na das ist ja wenigstens etwas! :P
Trotzdem Danke für Eure Hilfe....
Zum "später Löschen" -> wäre 'ne Möglichkeit, in der Regel würden auch erst was später Prämien erstellt werden, doch besteht theoretisch die Möglichkeit das dies bereits nach wenigen Minuten passiert. Da werden wohl alle Ansichten dran glauben müssen... :-\
-
wenn das also jemand händisch veranlasst - oder wer veranlasst auf welcher Entscheidungs Datenbasis Prämien, denn jemand muß das ja initiieren - dann machs doch net so wild: schmeiss ne View rein mit allen Docs, dazu ein Actionbutton, der nach doppelten sucht. Der Bediener wird verdonnert, daß er vor dem eigentlichen Anweisungsprozess nach doppelten sucht.
oder:
lös ne Warnmail aus, wenn jemand ein Doc kopiert und einfügt, wobei die Mail an den Verantwortlichen geht, was sicher Konsequenzen haben wird. Dazu kannste den Einfüge Agent wunderbar verwenden.
-
Hab den Code bei mir mal getestet und funktioniert.
Kopieren/Einfügen unterbinden:
In den Querypaste Event einer Ansicht kopieren
Sub Querypaste(Source As Notesuiview, Continue As Variant)
Msgbox "Dokument über ->Aktion -> Bearbeiten -> Duplizieren erstellen ",48,"Fehler: Kopieren/Einfügen nicht möglich"
Continue = False
Exit Sub
End Sub