NAME

pamDMS - Perl, Apache, Mysql Dokumentenmanagementsystem


Kurzbeschreibung

pamDMS (Perl, Apache, Mysql DMS) ist ein Dokumentenmanagementsystem auf Basis eines HTTP-Servers.


Einleitung

Perl, ursprünglich als "Practical Extraction and Report Language" konzipiert, ist inzwischen zu einer komplexen Programmiersprache herangewachsen. Selbst die Erweiterung um Sprachelemente zur Unterstützung der objektorientierten Programmierung ist vollzogen worden. Perl stellt sich als ideales Werkzeug zum "Rapid Prototyping" heraus. Das ist nicht zuletzt der Verdienst von zentralen Stellen wie CPAN (Comprehensive Perl Archive Network), in denen Programme, Module und Klassen für jedermann zur Verfügung stehen. Man muß also nicht alles neu programmieren, sondern kann sich mittels Baukastensystem an dem reichhaltigen Angebot bedienen und es aktiv erweitern. Perl selbst kennzeichnet sich durch seine Vielseitigkeit, Integrierbarkeit, Portabilität und Erweiterbarkeit aus. Die Vielseitigkeit drückt sich in dem von Larry Wall, dem Erfinder von Perl, geprägten Ausspruch "tmtowtdi" ("There's More Than One Way To Do It") aus. Perl vereinigt durch seine minimalen Ansprüche an die Syntax die Programmiergewohnheiten von Sprachen wie C, awk, sed u.ä. Deshalb kann man sich beim Programmieren also fast gänzlich auf das "Was zu tun ist" konzentrieren. Dennoch handelt es sich bei Perl um eine Sprache der dritten Generation, weshalb man um das Erlernen von Programmiertechniken nicht herum kommt. Durch die Perl/Tk-Erweiterung hat Perl den Einstieg in die Entwicklung von grafischen Schnittstellen gefunden und somit in die Programmierung von komplexen Anwendungen. Alles in allem, kann man mit Perl auf schnelle Art und Weise und wenig Aufwand viel erreichen.


Beweggrund

Im praktischen Einsatz in Betrieben ist oftmals lediglich nach Lösungen gefragt und wie schnell man sie erstellen kann. Diese haben individuell auf die Bedürfnisse abgestimmt zu sein und müssen eine zukunftsweisende, portable, erweiterbare Architektur besitzen. In diesem Fall betraf die zu beschaffende Lösung die zweckmäßige Verteilung von Dokumenten mit qualitätssichernden Inhalten im Unternehmen. Letztlich kamen die Anforderungen denen eines vollständigen Dokumentenmanagementsystems gleich. Um die Aufgabe so schnell wie möglich lösen zu können und den Anforderungen an die Funktionalität gerecht zu werden, kam als Programmiersprache Perl in Betracht.


Das System stellt sich vor


Probleme


Einleitung

Die ursprünglich verwendete Methodik in Unternehmen mit minimalem IT-Infrastrukturausbau hat eine gewisse Tradition, aber in Zeiten des ständigen Wandels auch ihre zahlreichen Nachteile. Sämtliche Dokumente stehen hierbei in Printform an jedem Arbeitsplatz zur Verfügung. Gerade in expandierenden Unternehmen liegt hier das Hauptproblem: dezentral gehaltene Dokumente. Heutzutage sind Dokumentaktualisierungen und -änderungen fast täglich vorzunehmen. Das hieß früher, daß alle Dokumente erneuert und sämtliche Mitarbeiter benachrichtigt werden müssen: Ein schwieriges und teures Unterfangen. Hinzu kommt, daß an beinahe jedem Arbeitsplatz bereits ein vernetzter PC zur Verfügung steht.


Konsequenzen

Für die Mitarbeiter bedeutet das bisherige Vorgehen, daß sie oftmals nicht up-to-date sind, was sich im schlimmsten Fall in Kontraproduktivität niederschlagen kann. Aufgrund des Verteilungsprozesses kann es zu gegenteiligen QM-Anweisungen kommen, die für Verunsicherungen sorgen. Die QS-Abteilung hat, entgegen ihrer eigentlichen Aufgabe, für die Verteilung und aktive Benachrichtigung der Mitarbeiter zu sorgen. Das ist in größeren Betrieben schwierig, da hier immer ein Teil der Belegschaft im Urlaub oder auswärts ist. Zudem ist oftmals keine Zeit sowie Notwendigkeit für synchrone Kommunikationsmittel wie Telefonie oder Gespräche. Die Einführung neuer Produktionsrichtlinien hat in den meisten Fällen bis zur nächsten Serie Zeit. Es müssen zusätzliche Kontrollen erfolgen, die sicherstellen, ob mit den aktuellen QMAs gearbeitet wird. Verunsicherungen gilt es aufzuklären.


Anforderungen

Die Hauptanforderung ist die zentrale Ablage von Dokumenten, auf die auf einfache Weise, direkt und schnell zugegriffen werden soll. Einfach konfigurierbare Benachrichtigungen an bestimmte Mitarbeiter bei Änderung von Dokumenten sowie ein Rechtemanagement (nur QS-Abteilung darf Dokumente bearbeiten) sollen verfügbar sein. Der Dokumentenzugriff ist auf das Intranet festgelegt, da eine zukunftssichere Architektur angestrebt werden soll. Die Administration sämtlicher für den Nutzer interessanten Einstellungen sollen durch Nichtinformatiker vorgenommen werden können. Hierdurch können Abteilungen wie QS sich selbst überlassen werden, ohne daß administrative Unterstützung erfolgen müßte. Bei der Einstellung von Benachrichtigungen sowie bei der Vergabe von Rechten wäre eine Benutzer/Gruppen-Philosophie sowie ein Vererbungsmechanismus wünschenswert. Datenbankseitige Eigenständigkeit ist aufgrund der minimalen Bindung anzustreben, sie bedeutet aber auch die Replikation einer vorhandenen Mitarbeiter-Tabelle aus einer anderen Datenbank. Eine Migration zu einem anderen Datenbankmanagementsystems soll möglich bleiben.


Systemumgebung

Den Mitarbeitern stehen diverse Windows NT-Clients zur Verfügung, die sich beim Einloggen an einem SMB-Server anmelden. Dadurch könnte eine Authentifizierung der User über ihre IP ermöglicht werden. Das Datenbankmanagementsystem Sybase SQL Anywhere Server sowie der Apache-Webserver standen zur Verfügung.


Systemkomponenten

Die Anforderungen sowie die festgelegte Systemumgebung grenzen die möglichen Systemkomponenten natürlich ein. Im Hinblick auf den Zugriff aus Filialen und dem Internet konnte nur eine HTML-basierte Lösung den Ansprüchen genügen. Zur dynamischen Seitengenerierung kommt Perl zum Einsatz. Der vorhande Sybase SQL Anywhere Server dient der Datenhaltung. Die eigentliche Dokumentenablage soll transparent im Dateisystem des Servers stattfinden, damit eine einfache, direkte Auslieferung durch einen Webserver möglich ist.


Bedienungsanleitung für Benutzer

Im folgenden sollen dem Benutzer des Dokumentenmanagementsystems (DMS) die grundlegenden Mechanismen zum Abruf von Dokumenten vorgestellt werden.


Einleitung

Zu den zum Einsatz kommenden Mechanismen, für die man ein Verständnis benötigt, gehört in erster Linie die Benutzer/Gruppen-Philosophie bei der Konfiguration von Benachrichtigungen und der Vergabe von Rechten. Man kann also mehrere Benutzer mehreren Gruppen zuordnen und nur noch diese Gruppen bei Definitionen heranziehen. Desweiteren wird Vererbung unterstützt. Es besteht die Möglichkeit, sich für einen bestimmten Ordner benachrichtigen zu lassen und man erhält somit Benachrichtigungen für alle Dokumente unterhalb dieses Ordners. Sollten also die folgenden Möglichkeiten nicht vollständig zur Verfügung stehen oder man erhält entsprechende Fehlermeldungen liegt das in den meisten Fällen daran, daß dem Benutzer entweder direkt oder durch seine Gruppe das Recht diese Aktion auszuführen nicht zugewiesen wurde. In diesem Fall kann man sich an den für diese Dokumente zuständigen Editor wenden.


Überblick

Das DMS besteht im Allgemeinen aus mehreren miteinander agierenden Internetseiten, auf die Sie über das Intranet zugreifen können.

Die folgende Abbildung zeigt eine Standardansicht des Dokumentenmanagementsystems:


Der Seitenkopf

Der Seitenkopf steht permanent zur Verfügung und dient dazu, von jeder beliebigen Stelle zur Anfangsseite, die man beim Starten des Systems auf der rechten Seite gesehen hat, zurückzukehren.


Die Baumstruktur

Die Baumansicht zur Linken dient der Navigation zwischen sämtlichen Dokumenten. Über die hierarchische Ordnerstruktur, die dem weithin bekannten Explorer nachempfunden wurde, sind sämtliche Dokumente zu erreichen. Über die "+"- und "-"-Symbole können Ordner geöffnet und geschlossen werden. Beim Öffnen erscheinen die darunter befindlichen Einträge. Durch Klicken auf die Einträge selbst, stellt man eine Anforderung an das eigentliche Dokument, daß sodann auf der Hauptseite erscheint. Bei Ordnern werden stattdessen weitere Informationen ausgegeben. Die Icons der Einträge geben einen Hinweis auf den Dokumenttyp oder den Ablageort. In dieser Strukur sieht man nur die Einträge, für die man das Recht dazu hat. Genauso verhält es sich mit dem Recht zur Anforderung eines Dokumentes. Selbst, wenn man Dokumente als Einträge sieht, bedeutet das nicht, daß man automatisch auch Zugriff auf diese Dokumente hat. Im Allgemeinen werden diese beiden Rechte aber zusammen vergeben. Unterhalb der Ordnerstruktur besteht direkter Zugriff auf Seiten zur Information und Manipulation, die in folgenden Abschnitten beschrieben werden.


Eintragsinformationen

Über diesen Link erhält man Informationen zu dem Eintrag, den man zuvor ausgewählt hat. Eine typische Eintragsinformation könnte wie folgt aussehen:

Hier sieht man z.B. den Dateinamen der diesem Eintrag hinterlegten Datei, dessen Beschreibung, Informationen über die Erstellung oder die letzte Änderung sowie eine Liste aller derjenigen Benutzer, die benachrichtigt werden, wenn sich dieser Eintrag ändert. Bei Verzeichnissen würde das genauso aussehen, mit dem inhaltlichen Unterschied, daß für Ordner zu benachrichtigende Benutzer für sämtliche Dokumente unterhalb dieses Ordners benachrichtigt werden.


Benachrichtigungen

Ist man als Benutzer in einer dieser Listen aufgeführt (konfiguriert durch den Editor), erhält man Benachrichtigungen. Hinzugefügte, gelöschte oder erneuerte Dokumente können einen Grund dafür darstellen. Sie werden mittels E-Mail an sämtliche für Benachrichtigung registrierte Benutzer zugestellt. Eine solche E-Mail kann wie folgt aussehen:

Um nicht umständlich die durch diese E-Mail mitgeteilten Informationen auf das DMS zu übertragen, braucht man als Benutzer nur auf den Link zu klicken und findet sich in dem geänderten Dokument oder in dem Ordner, in dem sich Änderungen ergeben haben, wieder. Solange man die E-Mail nicht löscht, besteht hierüber immer die Möglichkeit nochmals direkt über diesen Link das jeweilige Dokument aufzurufen.


Endbemerkung

Weitere Einzelheiten sind in der "Bedienungsanleitung für Editoren" zu finden.


Bedienungsanleitung für Editoren

Folgende Anleitung ist als Zusatzlektüre zur "Bedienunganleitung für Benutzer" an Editoren gerichtet, die Dokumente innerhalb des Dokumentenmanagementsystems (DMS) veröffentlichen und konfigurieren möchten.


Eintrag hinzufügen

Über diesen Link unterhalb der Baumansicht gelangt man zu folgender Seite:

Über diesen Dialog läßt sich ein Eintrag zum Baum hinzufügen. Dazu kann man einen beliebigen Bezeichner sowie eine Beschreibung eingeben. Wenn man mit der Maus über einen Eintrag geht, erscheint diese Beschreibung als Tooltip und in der Statuszeile des Browser (Internet Explorer, o.ä.). Man hat die Möglichkeit auszuwählen, was man hinzufügen möchte: Ordner oder Dokument. Betätigt man den "Durchsuchen..."-Knopf kann man sich, wie gewohnt, eine Datei aussuchen, die diesem Eintrag hinterlegt werden soll und so das eigentliche Dokument darstellt. Entgegen dem Standardverhalten, daß beim Klicken auf einen Eintrag im Baum dieser geladen wird, kann man den Baum zur Linken jetzt nutzen, um ein Verzeichnis oder einen Eintrag zu selektieren, unter dem der neue Eintrag erscheinen soll. Da unterhalb von Dokumenten keine weiteren Dokumente möglich sind, würde der neue Eintrag auf dessen Verzeichnisebene eingefügt werden. Man hat ständig die Möglichkeit sämtliche Eingaben wieder zu löschen oder mittels "Zurück" zur zuletzt geöffneten Seite zurückzukehren. Betätigt man die Schaltfläche "Hinzufügen" wird versucht, den Eintrag hinzuzufügen. Sie bekommen dann eine ausführliche Erfolgs- oder Fehlermeldung. Im Fehlerfall bitte auf die Ausschrift achten. Folgende Gründe könnten eine Fehlermeldung nach sich ziehen:

fehlendes Recht unterhalb des Ordners einen Eintrag hinzuzufügen
Größenlimit der Datei
eine Datei mit ungültigem Dateityp (DMS-spezifisch)
keine geschützte PDF-Datei (nicht ausdruckbar, ...)


Eintrag löschen

Über diesen Link unterhalb der Baumansicht gelangt man zu folgender Seite:

Über diesen Dialog läßt sich ein Eintrag aus dem Baum entfernen. Das geht nur mit Einträgen, die keine Untereinträge besitzen. Um einen Eintrag zu löschen, muß man ihn zuvor ausgewählt, also angefordert haben. Die Eigenschaft dieses ausgewählten Eintrags wird in diesem Dialog noch einmal angezeigt. Man hat ständig die Möglichkeit mittels "Zurück" zur zuletzt geöffneten Seite zurückzukehren. Betätigt man die Schaltfläche "Löschen" wird versucht, den Eintrag zu löschen. Sie bekommen dann eine ausführliche Erfolgs- oder Fehlermeldung. Im Fehlerfall bitte auf die Ausschrift achten.


Eintrag aktualisieren

Über diesen Link unterhalb der Baumansicht gelangt man zu folgender Seite:

Über diesen Dialog läßt sich ein Eintrag aus dem Baum abändern. Die Eigenschaften des zuvor ausgewählten Eintrags werden angezeigt und sind editierbar. Der Typ (Ordner oder Dokument) des Eintrags ist im Nachhinein zwar nicht änderbar, die hinterlegte Datei aber sehr wohl. Dieser Dialog ist sehr ähnlich dem Hinzufügen-Dialog mit dem Unterschied, daß hier ein Eintrag und alle damit verbundenen Benachrichtigungen und Rechte bereits bestehen und Auswirkungen haben. Man hat ständig die Möglichkeit alle Eingaben zu löschen oder mittels "Zurück" zur zuletzt geöffneten Seite zurückzukehren. Betätigt man die Schaltfläche "Ändern" wird versucht, den Eintrag zu erneuern. Sie bekommen dann eine ausführliche Erfolgs- oder Fehlermeldung. Im Fehlerfall bitte auf die Ausschrift achten. Folgende Gründe könnten eine Fehlermeldung nach sich ziehen:

fehlendes Recht diesen Eintrag zu löschen
Größenlimit der Datei
eine Datei mit ungültigem Dateityp (DMS-spezifisch)
keine geschützte PDF-Datei (nicht ausdruckbar, ...)


Vererbung

Vererbung bedeutet, daß man etwas für einen Eintrag definiert und sich diese Definition auf alle unterhalb befindlichen Einträge auswirkt. Das gilt im DMS sowohl für Benachrichtigungen als auch für die Rechtevergabe. Unter diesem Aspekt sollten also die folgenden Abschnitte betrachtet werden.


Benachrichtigungen verwalten

Benachrichtigungen werden bei folgenden Aktionen ausgeführt:

Hinzufügen eines Eintrags
Löschen eines Eintrags
Ändern der einem Eintrag hinterlegten Datei (Dokumentänderung)

Zuvor muß man wieder den Eintrag auswählen, dessen Benachrichtigungen man administrieren möchte. Der Dialog besteht aus drei Teilen: dem Vererbungsteil, dem Eintragsteil und der Zusammenfassung. Im Vererbungsteil werden die Benachrichtigungseinstellungen übergeordneter Ordner jeweils für Gruppen und Benutzer separat zusammengefaßt. Die Reihenfolge in dieser Liste sowie "+" und "-" beschreiben ein Regelwerk, das bestimmt, wer aus der Vererbung heraus bereits benachrichtigt wird. Da nicht immer eindeutig zu erkennen ist, welche Benutzer das im Einzelnen sind, gibt es die Zusammenfassungsliste im dritten Teil des Dialogs. In dieser Liste sind alle Benutzer aufgeführt, die für diesen Eintrag benachrichtigt werden. Hier gehen aber auch die Einstellungen mit ein, die man im Eintragsteil in der Mitte vornimmt. Nur diese Einstellungen kann man über diesen Dialog verändern. Hat man das getan, kann man jederzeit auf "Aktualiseren" klicken, um die Menge der Benutzer zu sehen, die nun letztendlich wirklich für diesen Eintrag benachrichtigt werden. Im Eintragsteil stehen, jeweils für Gruppen und Benutzer getrennt, 2 Listen zur Verfügung. Die unteren Listen beinhalten alle zur Verfügung stehenden definierten Gruppen und Benutzer. Mittels der Pfeile kann man Gruppen und Benutzer zu den anfangs leeren Listen hinzufügen. Diese Listen beinhalten die Benachrichtigungseinstellungen für den aktuellen Eintrag. Gruppen und Benutzer können positiv ("+") oder negativ ("-") der Liste hinzugefügt werden. Hierüber kann eingestellt werden, ob diejenige Gruppe, derjenige Benutzer für diesen aktuellen Eintrag benachrichtigt werden soll oder nicht. "Negative" Benachrichtigungen haben nur ihren Sinn, wenn ein Benutzer aus der Vererbung heraus für einen Eintrag benachrichtigt wird und dies für diesen speziellen und alle seine untergeordneten Einträge nicht möchte. Man hat ständig die Möglichkeit alle Eingaben zurückzusetzen oder mittels "Zurück" zur zuletzt geöffneten Seite zurückzukehren. Betätigt man die Schaltfläche "Speichern" wird versucht, die Benachrichtigungseinstellungen zu sichern. Sie bekommen dann eine ausführliche Erfolgs- oder Fehlermeldung. Im Fehlerfall bitte auf die Ausschrift achten. Folgende Gründe könnten eine Fehlermeldung nach sich ziehen:

fehlendes Recht für diesen Eintrag Benachrichtigungen zu vergeben


Algorithmus

Benachrichtigungen treten immer nach Aktionen bei genau einem Eintrag auf. Zur Entscheidungsfindung, welche Benutzer benachrichtigt werden müssen, werden sämtliche übergeordnete Ordner in die Entscheidung miteinbezogen. Ziel des folgenden Algorithmus ist es, eine Liste von zu benachrichtigenden Benutzern zu erhalten. Es wird also intern eine Liste gehalten, die aufgrund der Einstellungen zu diesen Einträgen behandelt wird. Vom obersten Ordner beginnend werden dieser Liste bei "positiven" Benachrichtigungen Benutzer hinzugefügt, bei "negativen" Benachrichtigungen werden die jeweiligen Benutzer wieder abgezogen. Gruppen werden dabei zu Benutzern aufgelöst. Das Ergebnis dieser Prozedur ist genau die Liste der zu benachrichtigenden Benutzer.


Rechte verwalten


Einleitung

Ähnlich wie bei Benachrichtigungen können zu jedem Eintrag Rechte vergeben werden. Auch hier ist immer eine Zuordnung entweder zu Gruppen oder Benutzern möglich. Die Vergabe von Rechten geschieht mittels einer Zugriffskontrollliste. Jeder Eintrag in dieser Liste weist mehrere verschiedene Rechte genau einer Gruppe oder einem Benutzer zu. Statt eines komplexen Regelwerks darüber, welche Zuweisungen Vorrang haben (direkte Benutzer- oder Gruppenzuweisungen), wird hier die Reihenfolge in dieser Liste herangezogen. Die Zuweisung, die in der Liste ganz oben steht, hat die höchste Priorität. Direkte Zuweisungen zu einem Eintrag haben natürlich eine höhere Priorität gegenüber denen, die durch übergeordnete Ordner vererbt werden. Da Ordner und Dokumente unterschiedliche Eigenschaften haben, besitzen sie nur teilweise dieselben Rechte. Lediglich Ordner können etwas vererben, da nur sie Untereinträge haben können. Daher besitzen sie bestimmte zusätzliche, vererbbare Rechte. Es ist hier wichtig, zwischen Ordnern und Dokumenten zu unterscheiden. Doch zunächst ein Überblick über den Vorrat an verfügbaren Rechten.


Vorhandene Rechte

Verzeichnisrechte:Dateirechte:


Zugriffskontrolllisten konfigurieren

Klickt man unterhalb des Baumes auf den "Rechte"-Link, erhält man folgenden Dialog:

Hier bekommt man die Zugriffskontrollliste mit den einzelnen Einträgen in Kurzform präsentiert. Um die Bedeutung der Abkürzungen zu erschließen, kann man oberhalb der Tabelle mit der Maus auf die Abkürzungen zeigen, damit eine Beschreibung als Tooltip oder in der Statuszeile des Browsers erscheint Es können Einträge angelegt, in der Reihenfolge verschoben und selektierte Einträge können gelöscht und editiert werden.


Zugriffskontrolleinträge konfigurieren

Der Dialog zum Bearbeiten eines Eintrags dieser Liste für einen Ordner sieht dann folgendermaßen aus:

Hier kann man alternativ eine der zur Verfügung stehenden Gruppen oder Benutzer auswählen, eine beliebige Menge von Rechten ankreuzen und bestimmen, ob dieser Gruppe oder diesem Benutzer diese Aktionen erlaubt oder verboten werden.


Algorithmus

Im folgenden soll einmal der Algorithmus skizziert werden, der zur Entscheidung über jegliche Aktion herangezogen wird. Jede Aktion wird immer von einem Benutzer an genau einem Eintrag ausgeführt. Für jede Aktion existiert deshalb ein Recht. Die Frage ist nun: Darf dieser Benutzer mit diesem Eintrag diese Aktion ausführen? Oder: Hat dieser Benutzer das Recht diese Aktion auf diesen Eintrag auszuführen? Diese Frage wird folgendermaßen beantwortet: Zuerst wird die Zugriffskontrollliste desjenigen Eintrags, mit dem man die Aktion ausführen will, durchgegangen. Dabei wird für jedes Element dieser Liste überprüft, ob es eine Regel ist, die diese Aktion beschreibt, und ob diese Regel für diesen Benutzer gilt. Gruppenbeziehungen werden dazu nötigenfalls aufgelöst. Bei dem ersten Finden einer Regel mit diesen Bedingungen stoppt der Algorithmus und hat eine klare und nachvollziehbare Aussage darüber, ob dieser Benutzer diese Aktion ausführen darf oder nicht. Wird für diesen Eintrag keine Regel gefunden, werden übergeordnete Einträge untersucht. Dabei wird aber nicht nach demselben Recht gefragt wie beim eigentlichen Eintrag, sondern nach einem äquivalenten Recht, daß lediglich die zusätzliche Eigenschaft besitzt, daß es vererbbar ist. Dieser Vorgang wird bis zur Wurzel des Dokumentenbaumes fortgesetzt und schlägt hier dann endgültig fehl. So dürfen Benutzer, denen keine Rechte eingeräumt wurden, anfänglich keine Aktionen ausführen. Zusammenfassend kann man also sagen: Anfragen an ein Recht auf ein Dokument resultieren in Anfragen an vererbbare, äquivalente Rechte übergeordneter Ordner.


Technische Referenz

In dieser Technischen Referenz werden verwendete Techniken und Probleme näher beleuchtet. Außerdem wird der eigentliche interne Ablauf der Funktionen, die man als Anwender lediglich benutzt, erläutert.


Zugriff

Die Form des Zugriffs orientiert sich an dem Ansatz, den HTML im Internet verfolgt: Browsing. Man soll also zu jeder Zeit Direktzugriff auf sämtliche Dokumente haben, ohne daß man vorherige Kenntnis über die Existenz eines Dokumentes haben muß, so daß Dokumentenabruf nicht zwanghaft denen vorbehalten ist, die wissen, was sie wollen. Aus diesen Anforderungen heraus, empfahl sich eine hierarchische Ordnerstruktur als persistente Ausgangsbasis. Dadurch daß diese Hierarchie dem Windows Explorer nachempfunden ist, ist eine intuitive, gewohnte Bedienung gewährleistet. Icons in Abhängigkeit vom Dateityp erleichtern die Navigation. Nicht nur der Zugriff auf Dokumente ist jederzeit möglich, sondern auch auf Seiten, über die man das Dokumentenmanagementsystem administriert.


Eintrag hinzufügen

Wenn ein Benutzer einen Eintrag in diese Hierarchie aufnehmen will, müssen zuvor einige Aktionen ausgeführt werden. Zu allererst sind die Rechte des Benutzers zu überprüfen. Also darf dieser Benutzer in diesem Ordner Dokumente oder Ordner hinzufügen? Wenn ihm dies gestattet ist, kann die clientseitig vorliegende Datei hochgeladen werden, wobei natürlich ein Größenlimit einzuhalten ist. Als serverseitiges Ziel muß ein eindeutiger, aber lesbarer Name im Dateisystem generiert werden. Desweiteren existieren einige zusätzliche, einzuhaltende Constraints: Nur Dateien gültigen Dateityps dürfen hochladbar sein und im Falle von PDF-Dateien müssen diese geschützt sein. Erst jetzt darf ein Eintrag in der Datenbank angelegt werden. Sämtliche manuell durchgeführten Aktionen müssen in einer Transaktion ablaufen, um einen geordneten sozusagen konsistenten Rückzug zu ermöglichen. Wurde ein Eintrag erfolgreich hinzugefügt, ist das ein Grund bestimmte Benutzer oder Benutzergruppen zu benachrichtigen. Letztendlich erhält der Client eine ausführliche Erfolgs- oder Fehlermeldung.


Eintrag löschen

Auch beim Löschen von Einträgen müssen die Rechte desjenigen überprüft werden. Darf dieser Benutzer dieses Dokument oder diesen Ordner löschen? Bevor man zugehörige Einträge aus der Datenbank löscht, muß man sich sämtliche Benachrichtigungen merken, um diese im Erfolgsfall noch verfügbar zu haben. Diese Aktionen zusammen mit dem Löschen der serverseitigen Datei müssen ebenfalls in einer Transaktion ablaufen. Nur im Erfolgsfall dürfen Benachrichtigungen ausgeführt werden.


Eintrag ändern

Einen bereits vorhandenen Eintrag zu Ändern stellt wahrscheinlich die am häufigsten vorgenommene Aktion dar. Ein Austauschen der hinterlegten Dateien entspricht dem Sinn eines Dokumentenmanagementsystems. Hier treten im Grunde sämtliche Aktionen des Löschen und Hinzufügen eines Eintrags zusammen auf, mit dem Unterschied, daß Datenbankeinträge lediglich aktualisiert werden.


Rechtedurchsetzung

Bisher war es so gewesen, daß ein direkter, einfacher Zugriff auf sämtliche Dokumente per HTTP-Anfrage ungeschützt möglich war. Diese Möglichkeit hebelt natürlich das gesamte Rechtemanagement aus. Aus diesem Grund mußte der Webserver um Module erweitert werden, die diese Rechte und damit verbundene Restriktionen auch durchsetzen. Dazu gehören im Einzelnen die folgenden Punkte, denen die nächsten Abschnitte gewidmet sind:

Zugriffskontrolle
Authentifizierung
Authorisierung
Logging, Profiling


Einleitung

Nun kann man sicherlich damit beginnen, Module für den Webserver in C zu entwickeln. Doch widerspricht dieser Ansatz den Anforderungen an Portabilität und Flexibilität. Es ist doch wünschenswert, nicht nur das System, sondern auch die Module in derselben Sprache zu schreiben: Perl. Aufgrund der Flexibilität und Schnelligkeit in Perl die gewünschte Funktionalität zu implementieren, sind bereits einige Leute auf diese Idee gekommen. Die Lösung heißt "mod_perl". Dabei handelt es sich um ein Apache-Modul, daß einen kompletten Perl-Interpreter in den Webserverprozeß integriert. Damit nicht genug, man kann innerhalb dieser Umgebung auf sämtliche intern im Webserver vorhandenen Datenstrukturen zugreifen. Auf diese Art und Weise kann man komplette Apache-Module in Perl schreiben, die in ihrer Flexibilität weit über hart C-codierte Module hinausgehen. Die Einbuße in der Ausführungsgeschwindigkeit kann man in normalen Einsatzgebieten leicht verschmerzen. "mod_perl" stellt die Möglichkeiten zur Verfügung für jede Phase der Requestverarbeitung sogenannte Handler zu installieren. Für die Ansprüche des DMS genügen lediglich drei.


Überblick


Zugriffskontrolle

Die Zugriffskontrolle klärt folgende Fragen:

Darf dieser Rechner zugreifen?
Muß er sich explizit authentifizieren?


Authentifizierung

Hat man die Fragen zum Zugriff geklärt, kann man sich um die Authentifizierung kümmern. Die Authentifizierung klärt folgende Fragen:

Wer ist der User?


Authorisierung

Die Authorisierung beschäftigt sich mit der Frage:

Darf dieser Benutzer auf genau diese Ressource zugreifen?


Logging, Profiling

In diese Phase kommt man nur, wenn der Benutzer auch wirklich die Ressource erhalten hat. Diese Information kann man sammeln, um daraus später Zugriffsstatistiken o.ä. zu erstellen. In diesem System wurde der Einfachheit halber das Logging mit in die Authorisierungsphase aufgenommen, da hier bereits klar ist, ob der Benutzer die Ressource erhält. Desweiteren sind hier schon Datenbankverbindungen offen, die genutzt werden können.


CGI-Problematiken

Der standardmäßige Ansatz bei der Benutzung von CGI sieht folgendermaßen aus: Für jede Anforderung an den Webserver, sieht sich dieser in der Phase der Inhaltsgenerierung gezwungen, einen Subprozess anzulegen, der das entsprechende CGI-Programm ausführt. In diesem Fall handelt es sich um Perl-Skripte, die zur Ausführung den Perl-Interpreter benötigen. Dieser relativ große Interpreter wird also jedesmal in den Speicher geladen, bevor mit der eigentlichen Compilierung des Perl-Codes begonnen werden kann. Hierbei wird wahrscheinlich auf noch mehr Dateien (Perl-Module, shared libraries) zurückgegriffen, die auch compiliert oder gelinkt werden müssen. Es handelt sich hier also um einen gewaltigen Overhead, der an Effektivität zu wünschen übrig läßt. Ein weiteres Problem liegt in der Persistenz, also dem Überdauern von Informationen auf Serverseite. Da CGI-Programme in Subprozessen laufen, besteht keine Möglichkeit Informationen im Webserver selbst zu halten. Datenbankzugriffe sind zwar möglich, setzen aber immer einen zeitintensiven Datenbankverbindungsaufbau voraus. Diese Verfahrensweise sei einmal in folgender Abbildung dargestellt:

Da im DMS stark von den Möglichkeiten von Perl und ebenso von mod_perl gebrauch gemacht wird, empfiehlt es sich, in diesem Lager nach Lösungsmöglichkeiten zu suchen. Mod_perl selbst stellt bereits einen vollständigen Perl-Interpreter innerhalb des Webserver-Prozesses zur Verfügung. Da liegt es nahe, diesen Interpreter für die Ausführung von CGI-Programmen in Perl zu nutzen. Hierfür existieren bereits einige interessante Module wie z.B. Apache::Registry oder Apache::Perlrun. Hiermit wird der Overhead, der durch Subprozesse entsteht dramatisch verringert. Hinzu kommt, daß einmal kompilierte Skripte vorkompiliert im Webserver verbleiben und so sofort für ihre nächste Ausführung bereitstehen. Antwortzeiten werden auf das 10 bis 100 fache beschleunigt! Führt man Prozesse innerhalb einer persistenten Instanz aus, ist es keine Schwierigkeit mehr, für die Lösung des zweiten Problems ebensolche Ansätze zu verfolgen. Das Perl-Modul Apache::DBI überschreibt die Standardmethoden des DBI-Moduls, über die sämtliche Datenbankzugriffe erfolgen. Hierdurch wird, von den CGI-Skripten unbemerkt, der Datenbankverbindungsabbau ignoriert, so daß dieselbe Verbindung beim nächsten Verbindungsaufbau sofort wieder bereitsteht. Leider hat dieser Ansatz auch seine Nachteile. Variablen innerhalb von Perl-Skripten behalten nach Beendigung ihre Werte, dadurch dürfen sich Skripte nicht auf den Inhalt von uninitialisierten Variablen verlassen. Eine strikte Programmierung (use strict;) ist essentiell, da im Fehlerfall statt des CGI-Prozesses der gesamte Webserverprozeß beendet würde.


Relationales Datenbankschema


Technologien

Das DMS versteht sich als 4-Schichten-Architektur. Eine weitgehende Trennung von statischem und dynamischem Inhalt wurde mittels Verwendung von Templates für die HTML-Seiten und Emails angestrebt. Die nächste Schicht beinhaltet die Funktionalität hinter diesen Seiten. Desweiteren exisitiert ein Modul, daß sämtliche Datenbankzugriffe kapselt. Hierdurch wird eine Abstraktion von der Datenhaltung erreicht, sodaß später durchaus eine Auslagerung zur Datenbank aus Effizienzgründen erfolgen könnte. Die letzte Schicht ist die Datenhaltung, die Datenbank selbst. Es existiert eine zentrale Konfigurationsdatei, über die man das gesamte System konfigurieren kann.


Geplante Features

Portierung auf freies DBMS (mysql, ...)
durch Benutzer konfigurierbare Benutzer, Gruppen, Gruppenbeziehungen
Optische Aufwertung
Unterstützung von Links (Benachrichtigungs-Problem)
Einträge verschiebbar
alternative Authentifizierungs-Module (OpenSSL, identd, ...)
Fulltextretrieval


Quellenangabe

Larry Wall, Tom Christiansen & Jon Orwant - Programming Perl
Udo Müller - Perl Ge-Packt
Johan Vromans - Perl 5 - kurz & gut
Stephen O. Lidie - Perl/Tk - kurz & gut
perldoc - Manual-Pages


Bemerkungen

Hiermit versichere ich, den Beleg selbständig, nur unter Zuhilfenahme oben genannter Quellen, erstellt zu haben.


Autor

Geschrieben von S. Pohl, <perl@s-pohl.de>


Bugs

Momentan zu sehr zugeschnitten.


Siehe auch

Projekt Homepage: pamDMS.sourceforge.net


Copyright

Dieses Programm ist freie Software. Sie können es unter den Regeln der GPL kopieren und weiterverbreiten.