Hallo,
hier also eine etwas umfänglichere Beschreibung:
Über die Datenbank wird ein Teil unseres Formularwesens abgefackelt. Neben dem Formularabsender (logisch) gibt es ggf. Zwischeninstanzen (Prüfung, Genehmigung, Info, Teilbearbeitung...) und immer eine Zielinstanz, bei die Endbearbeitung/Erledigung durchgeführt wird. Bei den meisten Prozessen sind Zwischen- und Zielinstanz von vornherein definiert und damit fest, bei einigen wird teil- oder volldynamisch während der Bearbeitung der weitere Workflow-Weg festgelegt. Teildynamisch, wenn aufgrund bestimmter Feldinhalte zugeordnete, feste Folgebearbeitungen zugeordnet werden (die wären dann auch vorher bekannt) oder volldynamisch, wenn die Folgeinstanz (Person oder Personenkreis) durch die Eingabe in ein Namensfeld erfolgt.
Wie gesagt, die einzelnen Formulare (=Dokumente) bleiben also in der Datenbank, nur ändert sich je nach Bearbeitungsstufe der Status (entsprechendes Feld). Außerdem müssen je nach Bearbeitungsstufe unterschiedliche Personen Lese- bzw. Schreibzugriff auf das Dokument bekommen. Geregelt wird das über Aktionen (Senden, Genehmigen, Erledigen...), die einerseits den Status verändern und andererseits eine Benachrichtigungsmail mit Doclink an die jeweils nächste Instanz schicken. Diese Instanz muss also zu diesem Zeitpunkt auch den Zugriff auf das Dokument bekommen (Aufnahme in Leser-/Autorenfeld).
Selten ist es aber so, dass eine solche Bearbeitungsinstanz nur eine einzelne Person ist (das wäre dann insgesamt völlig unproblematisch da diese Person sowohl ins sento- als auch ins Leser-/Autorenfeld eingestellt werden könnte), denn häufig stellen diese Instanzen einen Personenkreis dar. Hier könnte man also evtl. mit Verteilerlisten (Gruppen im Adressbuch) arbeiten. Das wäre zwar für den Mailversand und auch die Berechtigungsvergabe unproblematisch, da die Gruppe als sendto-Adresse eingestellt werden kann und ich die Gruppe über das Namensadressbuch auflösen kann und die Member ins Leser-/Autorenfeld einstellen kann. Von der Bearbeitung innerhalb der Gruppe hat dies aber den Nachteil, dass alle Mitglieder der Gruppe die Benachrichtigungsmail bekommen und damit alle aufgerufen wären, diesen Vorgang zu bearbeiten (Bearbeitungsaufwand, Traffic...). Noch schlimmer ist, dass es für die anderen Mitglieder nicht transparent zu machen ist, wenn ein Mitglied diesen Vorgang bearbeitet hat, es sei denn, es würde innerhalb der Gruppe einer erneute Mail geschickt werden ...
Wir haben uns also entschieden, Mail-IN-Datenbanken als Gruppenbriefkästen einzurichten, auf die eine bestimmte Gruppe von Personen Zugriff hat. In diesen Gruppenbriefkästen landen also die Benachrichtigungsmails. Organisatorisch ist geregelt, dass, nachdem ein Mitglied der Gruppe die Mail gelesen und den Vorgang bearbeitet hat, er diese Mail entweder in einem Ordner ablegt oder löscht. Damit ist einigermaßen gewährleistet, dass möglichst keine Doppeltaufrufe der Mail stattfinden. Das Senden der Mail stellt also kein Problem dar, allerdings kommt jetzt hier das Problem der dynamischen Berechtigungszuordnung zum Tragen. Denn ich müsste jetzt ermitteln, welche Personen oder Gruppen Zugriff auf die Mail-IN-Datenbank haben (Gruppen evtl. noch auflösen) und den so ermittelten Personenkreis zum Auslösezeitpunkt der Aktion ermitteln. Dies steht zwar schön alles in der ACL, ist jedoch tabu, da ich hier nicht zugreifen darf.
Und so steh ich armer Wicht nun hier....
Nein, also einen Lösungsansatz habe ich, weiss aber nicht so recht, ob der so geschickt ist, und, ob es nicht andere Lösungen gibt, denn ich denke, dass viele derartige Formularworkflows realisiert haben:
Für jede Mail-IN-Datenbank, die im Rahmen des Formularwesens genutzt wird, müsste dazu (mindestens) eine Berechtigungsgruppe im Namensadressbuch geschaffen werden, die gemäß einer Konvention über gleichartige Namensbestandteile identifizierbar ist (also Mail-IN: Betriebsrat; Gruppe: XYZ_Betriebsrat...). Ich müsste jetzt das sendto-Feld für die nächste Bearbeitungsinstanz gegen das Namenadressbuch ($Users; Feld Type oder Form) prüfen: wenn Person, kein Problem; wenn Group, auflösen, kein Problem; wenn Database, Präfix (XYZ_)vor den sendto-Wert einfügen und mit dem so ermittelten Gruppennamen erneut gegen das Namensadressbuch prüfen: wenn gefunden, auflösen, kein Problem; wenn nicht gefunden, Fehler (nicht für das Formularwesen gültige Mail-IN-DB ausgewählt...).
Würde also gehen, ist auch nicht so richtig aufwändig, aber ich bin gespannt auf Eure Erfahrungen.
Gruß Matthias