Auswirkungen der PDF Permissions auf jadice Funktionalität

Hintergrund

PDF-Dokumente können verschlüsselt und mit einem Rechtekonzept versehen sein. Dies kann beispielsweise zur Folge haben, dass ein Dokument verbietet, gedruckt oder modifiziert zu werden. Es ist Aufgabe einer PDF-verarbeitenden Anwendung, diese Berechtigungen zu respektieren.

Die in der jadice document platform mitgelieferten Komponenten berücksichtigen die gesetzten Rechte und nehmen ihre Funktion nur dann wahr, wenn dies auch erlaubt ist. Die Frage danach, wann eine Funktionalität aufgrund gesetzter Rechte ermöglicht werden sollte, lässt sich jedoch nicht pauschal beantworten. Da jadice als mächtige Toolbox viele verschiedene Einsatzszenarien ermöglicht, muss die Fragestellung im Kontext der jeweils resultierenden Gesamtanwendung betrachtet werden.

Um Integrationen nicht ungewollt in eine rechtliche Grauzone zu bewegen, handeln die in der document platform mitgelieferten Komponenten generell eher restriktiv. Da nicht bekannt ist, was mit den Dokumentdaten getan wurde, besteht im Zweifelsfall keine Möglichkeit über die Ausführung einer Funktionalität bei geltenden Rechten zu entscheiden. Da eine Entscheidung getroffen werden muss, kann diese nur negativ ausfallen und die Ausführung wird im Zweifelsfall eingeschränkt.

Technische Grundlage: Permissions und Intents

Die technische Grundlage zur Abbildung von Rechtesystemen in der jadice document platform wird durch die Klassen Permission und Intent gebildet. Ausprägungen von Permission repräsentieren eine konkrete Berechtigung – wie beispielsweise die Frage danach, ob gedruckt werden darf oder nicht. Jede Permission bezieht sich auf ein Objekt, auf dem die Rechte gesetzt werden; dieses Bezugsobjekt definiert den Gültigkeitsbereich einer Berechtigung. Typischerweise handelt es sich dabei um Bereiche wie ein Seitensegment, eine Annotation oder ein gesamtes Dokument. Die Klassen, die solch einen Bezugsbereich repräsentieren, implementieren typischerweise das Interface PermissionProvider um kenntlich zu machen, dass sie Berechtigungen zur Verfügung stellen.

Um Berechtigungen einzuholen muss deklariert werden, welche Handlungsabsicht innerhalb einer laufenden Anwendung besteht. Beispiele für solch eine Absicht sind der Druck eines Dokuments oder das Aufbringen einer Annotation. Programmatisch werden diese Handlungsabsichten durch Intent-Objekte kundgetan.

Jede Permission kann befragt werden, ob aus ihrer Sicht etwas gegen die Ausführung einer Handlungsanweisung spricht. Dies geschieht über die Methode vote(…). Als Rückgabewerte kann die Permission mit Erlaubnis, Verbot oder Enthaltung stimmen. Da innerhalb des jeweiligen Gültigkeitsbereichs mehrere Permissions gesetzt sein können, müssen alle berücksichtigt werden. Die zusammengefassten Rückgabewerte bestimmen letztlich darüber, ob die Ausführung einer Handlungsanweisung erlaubt wird oder nicht.

Verwendung im Kontext PDF Security

Beim Lesevorgang eines PDF-Datenstroms wird das im PDF-Standard definierte Berechtigungsmodell respektiert und auf jadice Berechtigungen abgebildet – wie diese Abbildung konkret vorgenommen wird, kann aus Tabelle 6.1 und 6.2 der jadice document platform Dokumentation (https://support.levigo.de/products/jadice/documentplatform/current/german/sect.pdf.crypt.html#sect.pdf.crypt.permissions) entnommen werden. Es handelt sich somit um formatspezifische Berechtigungen. Aufgrund dessen sowie der losen Kopplung von Seiten, Seitensegmenten und Dokumenten, wird das PageSegment als Gültigkeitsbereich der aus PDF resultierenden Permissions definiert. Dadurch wird sichergestellt, dass andere Seitensegmente – wie beispielsweise die Annotationen auf einer Seite – bei der Anzeige nicht beeinträchtigt werden.

Obwohl die Berechtigungen für Seitensegmente gelten, kann trotzdem die Situation eintreten, dass andere Seitensegmente davon beeinflusst werden. Dies ist beispielsweise dann der Fall, wenn eine gesamte Seite verarbeitet werden soll – beispielsweise um diese zu drucken oder deren Inhalt in die Zwischenablage zu übernehmen. Als konkretes Beispiel führt das Fehlen einer Berechtigung zur Modifikation auf einem einzelnen Seitensegment dazu, dass die gesamte Seite nicht gedruckt werden kann. Da für den Druckvorgang implizit die Segmente einer Seite zusammengeführt werden, entspricht dies einer Modifikation und kann daher nicht erlaubt werden.

Kann sichergestellt werden, dass das gedruckte Resultat dem Urzustand entspricht, steht es Integratoren frei, den Druck dennoch zu erlauben. Dies kann aber nicht pauschal entschieden werden, sondern muss im Kontext der Anwendung betrachtet werden. Die vollständige Umsetzung des PDF Security Konzepts kann letztlich nur durch die Integration erfolgen und liegt daher im Verantwortungsbereich der Integration. Es ist Aufgabe des Integrators sicherzustellen, dass die Vorgaben aus dem PDF-Standard beachtet werden.

Aktivieren mitgelieferter Commands

Commands die, wie im vorhergehenden Abschnitt beschrieben, aufgrund entsprechender Berechtigungseinstellungen ihre Arbeit verweigern, können eingesetzt werden, indem die entsprechende Berechtigung zugelassen wird. So kann beispielsweise ein Dokument, das Inhalts-Modifikationen verbietet, nur dann gedruckt werden, wenn diese verbietende Berechtigung entfernt wird. Der Berechtigungssatz kann beispielsweise über folgenden Code angepasst werden:

final Page p = ...;
final PageSegment ps = p.getPageSegment(DocumentLayer.DEFAULT);
final Permissions<PageSegment> permissions = ps.getPermissions();
final List<Permission<? super PageSegment>> pList = permissions.getPermissions();
for (final Permission<? super PageSegment> currentPermission : pList) {
    if (currentPermission == PageSegmentPermission.DENY.modification)
        pList.remove(currentPermission);
}

Typischerweise erlaubt das einfache Entfernen der Berechtigung in Konsequenz mehr Funktionalität als ursprünglich die Intention war. Wenn also beispielsweise auf dem Annotationslayer eine Annotation aufgebracht wird, dann aber beide Layer zum Druck gegeben werden, ist das Ergebnis eine modifizierte Seite – also genau das, was ursprünglich durch die verbietende Modifikationsberechtigung verhindert werden sollte. Daher müssen nach Entfernen der Modifikations-Permission oftmals stattdessen andere Permissions gesetzt werden. Diese Permissions sind anwendungsspezifisch und ergeben sich aus den Möglichkeiten der umgebenden Anwendung. Eine Möglichkeit wäre zum Beispiel, das Aufbringen von Annotationen zu verbieten. So kann sichergestellt werden, dass die ursprüngliche Intention des Modifikations-Verbots erreicht bleibt und trotzdem ein nicht modifiziertes Dokument gedruckt werden kann.