Skip to main content

Berechtigungskonzept

Das jadice web toolkit adaptiert das Berechtigungskonzept der jadice document platform. Berechtigungen können analog der jadice document platform serverseitig auf Dokumente oder Annotationen angebracht werden. Beim Transport der Dokumentdaten und Annotationen auf den Client werden die Berechtigungen mit übertragen, so dass die Tools auf Clientseite entsprechend reagieren können.

Binden von Berechtigungen an Objekte

Berechtigungen können an folgende Objekte gebunden sein:

  • Document : Die Berechtigungen gelten global für das gesamte Dokument.

    Beispiel: Die Berechtigung DocumentAnnotationPermission.DENY.ADD verbietet dem Benutzer das Anbringen von Annotationen auf dem Dokument.

  • Annotation : Die Berechtigungen gelten nur für einzelne Instanzen von Annotationen.

    Beispiel: Die Berechtigung IndividualAnnotationPermission.DENY.CHANGE verbietet dem Benutzer das Verändern einer einzelnen Annotation.

Besonderheit bei Annotationsberechtigungen: Verbietet eine dokumentbezogene Berechtigung eine Aktion, so wird die individuelle Berechtigung erst gar nicht ausgewertet. Erlaubt hingegen die dokumentbezogene Berechtigung eine Aktion, so wird im Anschluss noch die individuelle Berechtigung ausgewertet. Nur wenn diese nicht gesetzt ist oder die Aktion zulässt, so ist die Aktion auch tatsächlich erlaubt.

Berechtigungen

Dokumentberechtigungen

  • DocumentPermission.DENY.ADD_PAGES / ALLOW.ADD_PAGES

  • DocumentPermission.DENY.REMOVE_PAGES / ALLOW.REMOVE_PAGES

  • DocumentPermission.DENY.REORDER_PAGES / ALLOW.REORDER_PAGES

Dokumentbezogene Annotationsberechtigungen

  • DocumentAnnotationPermission.DENY.ADD / ALLOW.ADD

  • DocumentAnnotationPermission.DENY.CHANGE / ALLOW.CHANGE

  • DocumentAnnotationPermission.DENY.REMOVE / ALLOW.REMOVE

Individuelle Annotationsberechtigungen

  • IndividualAnnotationPermission.DENY.CHANGE / ALLOW.CHANGE

  • IndividualAnnotationPermission.DENY.REMOVE / ALLOW.REMOVE

  • IndividualAnnotationPermission.DENY.SHOW / ALLOW.SHOW

  • IndividualAnnotationPermission.DENY.WRITE / ALLOW.WRITE

Typische Szenarien

DENY.REORDER_PAGES

Nach Setzen der Berechtigung DocumentPermission.DENY.REORDER_PAGES können Seiten mittels des ThumbnailTools nicht mehr umsortiert werden.

Annotation DENY.CHANGE

Nach Setzen der Berechtigung IndividualAnnotationPermission.DENY.CHANGE oder DocumentAnnotationPermission.DENY.CHANGE können Annotationen nicht mehr verschoben werden. Die Wrangler zum Größer- und Kleinerziehen werden nicht mehr angezeigt und die Annotations-Toolbar bietet keine Annotationseditoren zum Ändern der Annotation (z.B. Farben, Textgröße) mehr an.

Annotation DENY.REMOVE

Nach Setzen der Berechtigung IndividualAnnotationPermission.DENY.REMOVE oder DocumentAnnotationPermission.DENY.REMOVE ist der Löschen-Button in der Annotations-Toolbar deaktiviert, so dass die Annotation nicht mehr gelöscht werden kann.

Annotation DENY.SHOW

Nach Setzen der Berechtigung IndividualAnnotationPermission.DENY.SHOW werden die betroffenen Annotationen nicht mehr angezeigt.

Annotation DENY.ADD

Nach Setzen der Berechtigung DocumentAnnotationPermission.DENY.ADD ist das Erstellen neuer Annotationen nicht mehr zugelassen. Die Buttons zum Erstellen neuer Annotationen in der AnnotationProfileAwareToolbar sind deshalb inaktiv und ausgegraut. Zusätzlich wird die Berechtigung im CreateAnnotationCommand überprüft.

Annotation DENY.CHANGE und DENY.REMOVE zum Schwärzen von Akten

Die Berechtigungen DocumentAnnotationPermission.DENY.CHANGE und DocumentAnnotationPermission.DENY.REMOVE kann man sich dahingehend zunutze machen, dass der darunterliegende Dokumentinhalt vollständig vor nicht berechtigten Benutzern versteckt wird.

Bei dieser Berechtigungskombination wird, abhängig von der AnnotationRenderStrategy siehe Beeinflussung des Annotationsrendering über eine AnnotationRenderStrategy, die Annotation serverseitig auf das Dokument gerendert. Clientseitig werden nur noch die Bounds der Annotation angezeigt. Sensibler Inhalt bleibt also den Benutzern verborgen. Selbst die listige Abfrage der Data-URLs (z.B. über die DevTools von Chrome oder Firebug für Firefox) verhilft dem Benutzer nicht zum Originaldokument - auch die über diese URLs geladenen Kacheln enthalten bei entsprechend eingeschränkten Berechtigungen bereits die Annotationen, die den Dokumentinhalt maskieren. Es besteht auf diesem Weg also keine Möglichkeit mehr, unautorisierte Daten aus den empfangenen Daten zu sniffen.

Hinweis

Die Annotationen müssen serverseitig im DocumentDataProvider zuerst (also vor dem Dokument) über den Reader geladen werden, damit deren serverseitiges Einbrennen auf dem Dokument sichergestellt ist.

Codebeispiel: Serverseitiges Setzen von Berechtigungen

Mit folgender Änderung im ClassPathWithAnnoDocumentDataProvider in der Methode read soll demonstriert werden, wie Berechtigungen serverseitig gesetzt werden können.

Bitte beachten: Serverseitig sind die Implementierungen com.levigo.jadice.annotation.auth.DocumentPermission, com.levigo.jadice.annotation.auth.DocumentAnnotationPermission bzw. com.levigo.jadice.annotation.auth.IndividualAnnotationPermission zu verwenden; clientseitig jedoch deren serialisierbare Entsprechungen com.levigo.jadice.annotation.auth.web.DocumentPermission, com.levigo.jadice.annotation.auth.web.DocumentAnnotationPermission bzw. com.levigo.jadice.annotation.auth.web.IndividualAnnotationPermission.

    ...
import com.levigo.jadice.annotation.auth.DocumentAnnotationPermission;
import com.levigo.jadice.annotation.auth.IndividualAnnotationPermission;
...

private void read(Reader reader, final String resource) throws JadiceException, IOException {

// Variante 1 - Setzen der Permissions pro Annotation
DefaultReaderControls controls = new DefaultReaderControls();
final AnnotationCustomizer annotationCustomizer = new AnnotationCustomizer() {

@Override
public void customize(Annotation a) {
a.getPermissions().getPermissions().add(IndividualAnnotationPermission.DENY.REMOVE);
}
};
controls.getSettings(JadiceAnnotationReaderSettings.class).getAnnotationCustomizers().add(annotationCustomizer);
reader.setReaderControls(controls);

// Variante 2 - Dokumentweites Setzen von Permissions
reader.getDocument().getPermissions().getPermissions().add(DocumentAnnotationPermission.DENY.REMOVE);

// Ab hier kommt der bereits bestehende Code
int targetIndex = reader.getTargetIndex();
{
InputStream in = getClass().getResourceAsStream(resource);
if (in == null) {
in = getClass().getClassLoader().getResourceAsStream(resource);
if (in == null)
throw new IOException("Cant find Resource on Classpath: " + resource);
}
reader.read(in);
}
{
String annoResource = resource + ".xmlanno";
InputStream in = getClass().getResourceAsStream(annoResource);
if (in == null) {
in = getClass().getClassLoader().getResourceAsStream(annoResource);
if (in == null)
return;
}

Format oldFormat = reader.getFormat();
JadiceAnnotationFormat format = new JadiceAnnotationFormat();
reader.setFormat(format);
reader.setTargetIndex(targetIndex);
reader.read(in);
reader.setFormat(oldFormat);
}

Variante 1 zeigt das Aufbringen von Berechtigungen per AnnotationCustomizer; und zwar einzeln pro Annotation (DENY.REMOVE im Beispiel). Dadurch lassen sich gezielt für einzelne Annotationen oder Annotationstypen bestimmte Berechtigungen setzen. In Variante 2 wird eine DocumentAnnotationPermission gesetzt (im Beispiel ebenfalls DENY.REMOVE). Diese ist global für das gesamte Dokument gültig, d.h. in Konsequenz sind alle Annotationen auf dem Client nicht mehr löschbar.

Hinweis

Das Setzen der Berechtigungen muss erfolgen, bevor Reader#read aufgerufen wird.