Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03196.jsonl.gz/2398

Jede Wiki-Seite gehört zu einem bestimmten Wiki und stellt verschiedene Wiki-Funktionen zur Verfügung: Lesen, Suchen, Edit, Diskussion, usw. Über die Config-Datei und die User-Datenbank kann für jedes Wiki detailiert eingestellt werden, welche User welche dieser Funktionen einer bestimmten Seite ausführen dürfen oder nicht. Das Wiki unterscheidet dazu drei Sorten von User: nicht registrierte User, registrierte User und Owner. Ein User, der eine Seite erstellt hat, ist deren Owner (Eigner).
Die Zugriffskontrolle des Wikis funktioniert nun wiefolgt. Eine von einem User aufgerufene Seite verlangt vom Wiki eine bestimmte Funktion, z.B. soll die Seite editiert werden. Das Wiki muss nun überprüfen, ob der User diese Rechte hat oder nicht. Dazu wird zunächst festgestellt, um welchen Usertyp es sich handelt. Ist er in der User-Datenbank registiert oder nicht? Ist er der Owner der Seite oder nicht? Wenn der User registriert ist, werden seine Rechte für das aktuelle Wiki aus der User-Datenbank gelesen. Sind dort keine speziellen Rechte vermerkt, gelten die in der Config-Datei festgelegten Rechte. Sind dort auch keine Rechte festgelegt, gelten einprogrammierte Standard-Rechte. In der Config-Datei kann für jedes Wiki und jeden Usertyp festgelegt werden, welche Funktion einer Seite ausgeührt werden darf.
Beispiel:
Ein registrierter User hat keine speziellen Rechte für ein Wiki A in der User-Datenbank erhalten. Er möchte eine Seite des Wikis A editieren. In der Config-Datei stehen folgende Rechte für das Wiki A:
DefaultPublicRight = read DefaultRegisteredRight = edit DefaultOwnerRight = manage
Das Wiki stellt nun fest, dass der User in der User-Datenbank registriert ist. Es handelt sich also um den Usertyp Registered. Bei diesem User sind jedoch keine speziellen Rechte für das Wiki A definiert, es sollen also die Standard-Rechte aus der Config-Datei gelten. Bei DefaultRegisteredRight steht edit. Das bedeutet, dass der User berechtigt ist, diese Seite zu editieren (und zu diskutieren und zu lesen).
Wäre der User auch noch der Owner der Seite, hätte er die Rechte manage, womit die weitestgehenden Rechte für die Seite hätte. Wäre der User nicht registriert, dürfte er die Seite nur lesen.
Die Zugriffstkontrolle auf Wiki-Seiten kann zusätzlich via AppliAccessControl über externe Applikations-Module gesteuert werden. Sinn dieser Schnittstelle ist, dass User-Rechte aus einer externen Datenbank eingelesen und dem Wiki mitgeteilt werden können. Wird AppliAccessControl implementiert, so übersteuern die externen User-Rechte die aus der Wiki User-Datenbank gelesenen Rechte. Hier wird beschrieben, wie diese externe Schnittstelle aussieht.
Das Wiki (wikiengine.inc) ruft vor dem Verarbeiten einer Seite die extern definierte Funktion AppliAccessControl (falls vorhanden):
sub AppliAccessControl()
Diese Funktion muss ein Return machen, wenn der aktuelle User Zugriff auf das Wiki haben darf. Wenn nicht, muss diese Funktion ein Appli-Login-Formular rufen bzw. eine Fehlermeldung anzeigen und darf KEIN Return machen!
Wenn AppliAccessControl ein Return macht, geht das Wiki davon aus, dass der User die nötigen Appli-Rechte hat, die Seite per Wiki auszuführen. Das Wiki kann jedoch die Rechte je nach Wiki, Seite oder Funktion noch weiter einschränken, so wie dies in der Config- und User-Datenbank festgelegt wird.
AppliAccessControl übergibt dem Wiki über die globalen Variablen AUTH_USER und AUTH_USER_RIGHT weitere Informationen über den User:
Die Werte in AUTH_USER_RIGHT haben vor Werten aus einer allenfalls vorhandenen Wiki User-Datenbank Vorrang.
APhS kennt diverse User Typen (UT_Unknown...UT_Supervisor, siehe d/login/access_control.inc). Die APhS-Rechte eines Users werden in einer Bitmaske in der Mitglieder-Datenbank festgelegt, ein Bit für jede Zone, auf welche der User Zugriff haben darf. Einige der APhS-Zonen sind Wiki-Anwendungen: Mitarbeiter-Bereich, Webmaster-Bereich, Mitglieder-Bereich, Redaktions-Bereich. Jedes Wiki mit Zugriffskontrolle muss also in AppliAccessControl überprüfen, ob der aktuelle User auf eine der folgenden Zonen zugreifen darf:
ZN_Team für Mitarbeiter-Wikis ZN_Admin für Webmaster-Wikis ZN_MemberArea für Mitglieder-Wikis ZN_Redaktion für Redaktions-Wikis
ZN_Team bis ZN_Redaktion sind in /d/login/access_control.inc festgelegte Konstanten für jede Zone.
Jede Wiki-Instanz kann in der globalen Variablen ACCESSCONTROL_ZONE festlegen, zu welcher APhS-Zone die Instanz gehört. Wird ACCESSCONTROL_ZONE nicht definiert, gilt automatisch die Zone ZN_Team. Wird ACCESSCONTROL_ZONE = "" definiert, ist das Wiki öffentlich. Weitere mögliche Werte für ACCESSCONTROL_ZONE sind: Team → ZN_Team, Admin → ZN_Admin, Member → ZN_MemberArea, Redaktion → ZN_Redaktion.
Die in ACCESSCONTROL_ZONE definierte Zone wird in AppliAccessControl mit der Access-Mask des Benutzers aus der Mitglieder-Datenbank verglichen.
Der aus der Mitglieder-Datenbank gelesene Usertyp wird von /d/login/access_control.inc in gUserType gespeichert. Über die Variable AUTH_USER_RIGHT werden in AppliAccessControl für UT_Admin und UT_Supervisor die Wiki-Rechte admin übergeben. Für alle anderen APhS-Usertypen wird ein Leerstring übergeben, es gelten also die Wiki-Rechte, wie sie in den Konfigurations-Dateien festgelegt sind, bzw. die einprogrammierten Standard-Wiki-Rechte.
AppliAccessControl ist in der Datei /d/stuff/wikilayout.inc implementiert. Diese wird von jeder Wiki-Instanz includet.