Software-Entwicklungen
(AddOns für das Web-Content-Management-System Redaxo)

Kontrolle des Zugriffs auf Artikel und Mediendateien für Redaxo 5
Version 2.2
Autor: Wolfgang Busch

Dieses AddOn ermöglicht einen Zugriffsschutz für ausgewählte Bereiche von Artikeln und/oder Mediendateien. Der Zugriff wird über die Authentifizierung von Redaxo-Benutzern kontrolliert, denen über ihre Rollen die entsprechenden Kategorien zugeordnet sind. Die erfolgte Autorisierung wird Session-basiert gespeichert.
Es ist nur eine einfache Rewrite-Regel erforderlich.
Das AddOn ist komplett zweisprachig eingerichtet (deutsch, englisch).
 
Geschützte Bereiche:
In Rollen für Redaxo-Benutzer werden normalerweise Kategorien und Medienkategorien markiert, um den Verantwortungsbereich (Schreibzugriff) eines Redakteurs für alle Artikel und Mediendateien im zugehörigen Pfad festzulegen. In diesem AddOn werden entsprechend definierte Kategorien und Top-Medienkategorien mit allen im Pfad darunter liegenden Artikeln bzw. Dateien als "geschützte Bereiche" interpretiert. Auf diese Bereiche erhalten Besucher erst nach Authentifizierung im Frontend mit Name und Passwort des zugehörigen Redaxo-Benutzers Lesezugriff.

Bewacher-Benutzer:
Redaxo-Benutzer mit solchen Rollen können als "Bewacher-Benutzer" für ihre zugehörigen Bereiche eingerichtet werden. Auf diese Weise kann auch eine Kategorie festgelegt werden, in deren Pfad nur der im Backend eingeloggte Site-Administrator als Besucher Lesezugriff hat ("verbotener Bereich"). Ein im Backend eingeloggter Redaxo-Redakteur hat auch dann Lesezugriff auf seine Seiten, wenn diese in geschützten Bereichen liegen.

Überprüfung der Zugriffsberechtigung:
Ob ein angeforderter Artikel öffentlich, geschützt oder verboten ist, kann mithilfe einer AddOn-Funktion festgestellt werden, sinnvollerweise im Seiten-Template. Dort kann ggf. ein Hinweis oder ein Link auf eine Login-Seite anstelle des Artikelinhalts angezeigt werden. Die Überprüfung, ob eine Mediendatei öffentlich oder geschützt ist, erfolgt in der Boot-Datei. Bei fehlender Zugriffsberechtigung wird anstelle der angeforderten Mediendatei ein Standard-Fehlerbild angezeigt.
 
Einrichtung von Bewacher-Benutzern:
Ein Bewacher-Benutzer wird wie ein Redakteur in der Benutzerverwaltung angelegt:
Er wird als inaktiv definiert, sein Passwort kann daher nur mit Admin-Rechten geändert werden.
Das Feld "Beschreibung" bekommt den Wert "Protector" (bzw. "Guardian" für den verbotenen Bereich).
Er erhält eine Rolle, in der seine Kategorien und Top-Medienkategorien festgelegt sind.
Ein Bewacher-Benutzer kann mehrere derartige Rollen erhalten. Auf diese Weise ist es möglich, dass sich geschützte Bereiche überschneiden und der Zugriff auf Kategorien von mehr als einem Bewacher kontrolliert wird.
Nach Einrichtung der Bewacher-Benutzer wird der Schutzmechanismus durch Re-Installation des AddOns aktiviert bzw. aktualisiert. Dabei werden die zugehörigen Daten im AddOn-Cache abgelegt (json-codiert).
Jede Löschung des Redaxo-Caches (z.B. in den System-Einstellungen) erfordert daher auch eine Re-Installation des AddOns.

Kontrolle des Zugriffs auf die aktuelle Seite:
Der Rückgabewert der AddOn-Funktion protected_or_forbidden() ermöglicht die Entscheidung, ob die aktuelle Seite angezeigt werden darf (0) oder nicht (1,2,3,..., oder eine Komma-separierte Liste positiver ganzer Zahlen):
=0: die Seite ist öffentlich, oder der Besucher ist autorisiert
=1: verbotener Bereich, der Besucher ist nicht als Site-Administrator im Backend eingeloggt
>1: (= Komma-separierte Liste der Ids der Bewacher-Benutzer der Seite) der Besucher hat sich nicht authentifiziert
Es folgt ein schematisches PHP-Code-Schnipsel für ein Seiten-Template, um ggf. einen entsprechenden Hinweis oder einen Link auf eine Login-Seite anstelle des Artikelinhalts anzuzeigen:
   $uid=access_control::protected_or_forbidden();
   if($uid>0):
     #     $uid = integer (>0) or comma-separated list of integers (>0 each)
     if($uid==1):
       #   forbidden
       else:
       #   protected
       echo '... <a href="...../login_page.html?uid=$uid">Sign in</a> ...';
       endif;
     else:
     echo $this->getArticle(); // article content
     endif;

Anmeldeverfahren für Bewacher-Benutzer:
Es ist ein Artikel anzulegen, der nur den Aufruf der AddOn-Funktion login_page() enthält. Er gibt ein Anmeldeformular für einen oder mehrere der jeweils zuständigen Bewacher-Benutzer aus (vergl. oben).
 <?php [$uid=]access_control::login_page(); ?>
Die Ids der Bewacher bestehen aus einer Komma-separierten Liste und werden der Seite mittels URL-Parameter "uid=$uid" übergeben. Die Funktion überprüft das Passwort für den eingegebenen Bewacher-Benutzer in verschlüsselter Form und speichert im Erfolgsfalle dessen für die Zugriffskontrolle notwendigen Daten in einem Session-Array ab. Der Rückgabewert der Funktion muss nicht weiter ausgewertet werden (Id des eingegebenen Bewachers im Erfolgsfall, andernfalls die eingelesene Id-Liste).

Adressumleitung der Mediendateien:
   RewriteRule  ^media/(.*)  index.php?auth_file=$1
Auf diese Weise ist in allen Medienreferenzen die betreffende Datei mittels rex_request-Funktionen erfassbar, und die Zugriffsberechtigung kann schon in der Boot-Datei kontrolliert werden.
 

Anzeige eines Bespiels

AddOn-Download