Archiv

TechInfo

Dokument Löschen ohne Löschrechte

By Dirk Bergles

Zum wiederholten mal kam es nun vor das Prozesse scheiterten, weil User kein Recht haben Dokumente zu löschen. Für Autoren eine durchaus legitime Einstellung in der ACL.
Zuletzt in einem Kundenprojekt beim Tagging, wo einfach TagRelation nicht wieder entfernt werden konnten, weil der User kein Recht zum Löschen von Dokumenten hatte. Gleiches passiert auch im WebUI mit den Temp Dokumenten für FileUploads.
Um nun den ganzen Aufwand mit Löschflag, zeitgesteuertem Löschen durch einen Agenten, u.s.w zu vermeiden, gibt es nun ein Funktion zum Löschen von Dokumenten.

Die geht letztendlich hin, prüft in der ACL ob der User löschen darf, wenn ja, Dokument auf herkömmlichen Weg löschen, wenn nein wird ein Agent gestartet, gesigned mit ausreichenden Rechten, welcher dann das Dokument entfernt.

Ganz wichtig. Niemals vergessen vor dem Löschen zu prüfen ob der User das darf.

In der SWM_Error gibt es nun die Funktion
Sub removeDocument(doc as NotesDocument)
Welche nun entweder herkömmlich sas Dokument mit doc.remove(true) löscht, oder aber den Agenten "SWM_RemoveDocument" startet, welcher mit der UniversalID das Dokument sucht und dann entfernt.
Der Agent wird in der parentDatabase des doc gesucht. Wenn also die Dokumente nicht im CMS liegen, so muß auch der Agent in der anderen Datenbank liegen.

Die Änderung gibt es ab 7.70 0, kann aber leicht integriert werden.

Oder in Java, dort aber eher customized:
/* removes a document. Also if the user has no Deletion AccessRights.
* @param doc the document to remove
* @return true if the document was removed directly, because the user has enough rights, otherwise false
*/
private boolean removeDocument(Document doc) {
try {
Vector trans = this.session.evaluate("@UserAccess( @DbName; [DELETEDOCUMENTS])");
if (((String)trans.get(0)).equals("1")) {
doc.remove(true);
return(true);
} else {
Agent agent = this.thisDB.getAgent("SWM_RemoveDocument");
agent.runOnServer(doc.getUniversalID());
}
} catch (NotesException e) {
e.printStackTrace();
}
return(false);
}

Einen Kommentar erstellen