AddOn


Kontrolle des Zugriffs auf Artikel und Mediendateien

Beschreibung

Dieses AddOn ermöglicht eine Zugriffskontrolle für ausgewählte Bereiche von Artikeln und/oder Mediendateien. Damit ist gemeint, dass ein Besucher im Front-End eine Authentifizierung benötigt, um bestimmte Seiten oder Mediendateien sehen zu dürfen. Auf diese Weise werden Besuchergruppen eingerichtet, die von der allgemeinen Öffentlichkeit abgegrenzt sind.
Der Zugriff wird über die Authentifizierung von Redaxo-Benutzern kontrolliert, denen über ihre Rollen die entsprechenden Bereiche zugeordnet sind.
Die erfolgte Autorisierung wird Session-basiert gespeichert.
Das AddOn ist komplett zweisprachig eingerichtet (deutsch, englisch).

Geschützte Bereiche:
Die Zugriffskontrolle kann für jede beliebige Kategorie eingerichtet werden ("geschützter Bereich"). Der Schutz erstreckt sich dann auf alle Artikel, die in dieser Kategorie und in ihren Unterkategorien liegen. Ggf. muss der inhaltlich aufgebaute Kategorienbaum zugunsten des Datenschutzes umstrukturiert werden, indem schutzwürdige Artikel in einen geschützten Bereich verschoben werden.
Analog können vorhandene oder neue Top-Medienkategorien als geschützte Bereiche für Mediendateien angelegt werden.
Darüber hinaus kann bei Bedarf auch eine Kategorie als "verbotener Bereich" definiert werden. Auf diesen hat nur der Site-Administrator Lesezugriff als Besucher, wenn er im Backend eingeloggt ist.

Bewacher-Benutzer:
Die Zuordnung einer geschützten Kategorie bzw. Medienkategorie zu einem Redaxo-Benutzer ("Bewacher-Benutzer") wird im Rahmen der Redaxo-Benutzerverwaltung über entsprechende Rollen realisiert. Einem Bewacher-Benutzer können mehrere geschützte Bereiche zugeordnet werden, sowohl Kategorien als auch Medienkategorien.

Überprüfung der Zugriffsberechtigung:
Mithilfe einer AddOn-Funktion lässt sich feststellen, ob ein angeforderter Artikel öffentlich, geschützt oder verboten ist. Dies geschieht sinnvollerweise im Seiten-Template. Ggf. wird dort anstelle des Artikelinhalts ein Link auf ein Formular zur Authentifizierung angezeigt.
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.

Authentifizierung:
Um auf einen geschützten Artikel oder eine geschützte Mediendatei zugreifen zu können, muss sich ein Besucher vorher durch Angabe von Login-Name und Passwort des zugehörigen Bewacher-Benutzers authentifizieren. Ein entsprechendes Formular ist verfügbar.


busch-dettum.de/public/it/access_control.html

Umsetzung

Wolfgang Busch

An der Windmühle 3 38173 Dettum busch-dettum.de

Versionen

2.6.2

Für REDAXO
^5.3.0
Veröffentlicht am
24.11.2023

Kleine Korrektur zu rex_get in der boot.php.
$_GET, $_POST generell ersetzt durch rex_get(), rex_post().

2.6.1

Für REDAXO
^5.3.0
Veröffentlicht am
25.10.2023

Kleine Korrekturen im Zusammenhang mit der Login-Seite

2.6

Für REDAXO
^5.3.0
Veröffentlicht am
14.10.2023

Das AddOn erzeugt jetzt ein Authentifizierungs-Formular, abgelegt in der Datei 'signin_page.php' im Basisordner. Bisher benutzte Login-Seiten werden nicht mehr verwendet.

Die Einbindung eines Links auf diese Login-Seite im Seiten-Template ist etwas vereinfacht und muss dort entsprechend angepasst werden. Die darin enthaltenen Hinweise sind zweisprachig abgefasst.

2.5.2

Für REDAXO
^5.3.0
Veröffentlicht am
16.02.2023

Die Ausgabe der Fehler-Bilddatei ist noch einmal korrigiert. Das zugehörige rex_managed_media-Objekt wird jetzt mittels rex_media_manager::create(...) erzeugt. - Es funktioniert aber auch mit den Wertzuweisungen $_GET['rex_media_type']='default'; $_GET['rex_media_file']='/assets/addons/access_control/protected.gif';

Die in Vers. 2.5 eingeführte automatische Erzeugung von Top-Medienkategorien ist in Vers. 2.5.2 wieder entfernt. Der entsprechende Mechanismus zum Schutz von Mediendateien in Unterordnern des Medienordners bleibt aber erhalten. Die Einrichtung der Top-Medienkategorien kann nun im Rahmen der Verwaltung einer Ordnerstruktur für Mediendateien in einem neuen AddOn (media_directories) erfolgen. Alternativ können sie 'händisch' im Medienpool definiert werden.

2.5.1

Für REDAXO
^5.3.0
Veröffentlicht am
11.11.2022

Die Ausgabe der Fehler-Bilddatei hat seit Version 2.4 nicht korrekt funktioniert. Daher wird diese nun wieder mittels rex_managed_media-Funktion sendmedia() ausgegeben.

2.5

Für REDAXO
^5.3.0
Veröffentlicht am
26.10.2022

Auch Mediendateien in Unterordnern des Medienordners können jetzt mit den Mitteln dieses AddOns geschützt werden. Dazu wird für jeden Top-Unterordner des Medienordners automatisch eine Top-Medienkategorie ('ZZ:ordnername') erzeugt. Wird diese als geschützter Bereich definiert, gilt der Schutz für alle Dateien im Pfad des zugehörigen Top-Medienunterordners.

Damit Mediendateien außerhalb des Medienordners mit dem Media-Manager-URL adressiert werden können, muss für ihren Pfad ein Medientyp mit dem entsprechenden "mediapath"-Effekt eingerichtet werden. Für jeden Unterordner des Medienordners ist also ein solcher Medientyp anzulegen.

Die Zugehörigkeit zum geschützten Bereich wird hier aus dem Medientyp - anstatt aus der Mediendatei - abgeleitet.

2.4

Für REDAXO
^5.3.0
Veröffentlicht am
02.03.2022

In der .htaccess-Datei ist jetzt nur noch die Standard-RewriteRule erforderlich, die Medien-URLs der Form '/media/filename' in die Form '/index.php?rex_media_type=default&rex_media_file=$1' umschreibt. Die Zugriffskontrolle erfolgt also ausschließlich auf der Basis des Media-Manager-URLs.

Das AddOn gibt jetzt keine Mediendateien mehr aus. Es verändert lediglich die folgenden PHP-Variablen, wenn der Besucher keinen Zugriff auf eine Mediendatei hat:
$_GET['rex_media_file'] erhält den URL der Fehler-Bilddatei im Ordner /assets/addons/access_control/.
$_GET['rex_media_type'] wird auf 'default' gesetzt.
Dadurch gibt Redaxo anschließend diese Fehler-Bilddatei aus. Die zugehörige Funktion print_file wurde daher umbenannt in control_file.

Konstanten werden nicht mehr per 'define(...)' vereinbart, sondern als Klassen-Konstanten definiert.

Die Detailbeschreibung enthält jetzt eine besser strukturierte Handlungsanweisung zur Einrichtung der Zugriffskontrolle.

2.3.3

Für REDAXO
^5.3.0
Veröffentlicht am
07.12.2021

Der Frontend-Sprachcode rex_i18n::setLocale(...) wird jetzt über die Sprach-Id der Login-Seite gesetzt, nicht mehr über den Sprach-Code (fehleranfällig!).

Die Login-Seite ist nicht leer, wenn noch kein Bewacher-Benutzer definiert ist, sondern zeigt einen entsprechenden Hinweis an.

2.3.2

Für REDAXO
^5.3.0
Veröffentlicht am
16.02.2021

Ein Flüchtigkeitsfehler in der Dokumentation ist behoben.

2.3.1

Für REDAXO
^5.3.0
Veröffentlicht am
16.02.2021

Die Funktion print_file ist jetzt vereinfacht. Außerdem enthält sie keinen Rückgriff mehr auf ein Fehler-Bild, das in neueren Versionen des Media-Managers nicht mehr verfügbar ist.

Jetzt werden auch Mediendateien korrekt angezeigt/ausgeliefert, wenn sie - z.B. per Upload - in 'Keine Kategorie' zugeordnet wurden.

Das AddOn muss nicht nach jedem Löschen des System-Caches re-installiert werden. Die Dokumentation ist entsprechend korrigiert.

2.3

Für REDAXO
^5.3.0
Veröffentlicht am
07.02.2021

Die Dokumentation ist überarbeitet und damit (hoffentlich) benutzerfreundlicher.

In der Detailbeschreibung ist ein Fehler verbessert, genauer im PHP-Code-Schnipsel für das Seiten-Template und dort im Link auf die Login-Seite.

Die Funktion "protected_or_forbidden()" ist umbenannt in "protected_or_prohibited()". Der entsprechende Code-Schnipsel für das Seiten-Template muss spätestens mit der nächsten AddOn-Version angepasst werden (derzeit ist die bisherige Funktion noch als Alias vorhanden).

Der Aufruf der Login-Seite liefert die Ids der Bewacher-Benutzer, die sich auf der Seite authentifizieren können. Ein Aufruf ohne oder mit leerem URL-Parameter liefert jetzt die Ids ALLER Bewacher-Benutzer anstatt keine.

Ist ein Bewacher-Benutzer eingeloggt, zeigt ein erneuter Aufruf der Login-Seite jetzt zunächst nur einen Abmelden-Button. Erst nach erfolgter Abmeldung wird ein neues Authentifizierungsformular angezeigt.

2.2

Für REDAXO
^5.3.0
Veröffentlicht am
24.11.2020

Durch Nutzung des AddOn-Caches sowie zusätzliche Session-Variable werden etliche Zugriffe auf die Redaxo-Tabellen rex_user und rex_user_role vermieden, um eine bessere Performance des AddOns zu erreichen.

Die Daten der Bewacher-Benutzer werden jetzt im AddOn-Cache abgelegt, und zwar über die neue install.php. Daher muss nach Einrichtung und nach jeder Änderung der Bewacher-Benutzer eine Re-Installation des AddOns durchgeführt werden. Der Cache wird bei der De-Installation wieder gelöscht. Wird der Cache auf anderem Wege (z. B. in den System-Einstellungen) gelöscht, ist ebenfalls ein re-install nötig, um den AddOn-Cache neu aufzubauen.

Nach Authentifizierung eines Besuchers werden jetzt alle für die Zugriffskontrolle notwendigen Daten des zugehörigen Bewacher-Benutzers in Session-Variablen gespeichert, nicht nur dessen Login-Name.

Solange ein Besucher als Redakteur im Backend eingeloggt ist, hat er Zugriff auf die Kategorien und Medienkategorien, die seiner Rolle zugeordnet sind. Dazu werden jetzt auch seine für die Zugriffskontrolle notwendigen Daten im Session-Array gespeichert, analog zu einem authentifizierten Besucher.

Wenn mehrere Bewacher-Benutzer den Zugriff auf eine Kategorie kontrollieren, kann sich ein Besucher jetzt über jeden dieser Bewacher authentifizieren, nicht nur (wie bisher) über den zufällig letzten.

2.1.1

Für REDAXO
^5.3.0
Veröffentlicht am
02.10.2020

Kleinere Korrekturen am Programmcode zur Vermeidung von PHP-Warnungen.

2.1

Für REDAXO
^5.3.0
Veröffentlicht am
11.10.2019

Der Quellcode ist redaktionell und mit Blick auf bessere Performance überarbeitet.

2.0

Für REDAXO
^5.3.0
Veröffentlicht am
05.10.2019

Der bisherige 'Gemeinschaftsbenutzer' wird ersetzt durch einen Redaxo-Benutzer (rex_user). Darüber hinaus kann der Zugriff auf verschiedene Kategorien und/oder Medienkategorien individuell über mehrere Redaxo-Benutzer kontrolliert werden. Damit entfällt auch die gesamte Konfiguration.

Die Funktion protected_or_forbidden() gibt jetzt andere Werte zurück.
!!! Die entsprechende Passage im Seiten-Template muss geändert werden !!!

An die Login-Seite muss nun die Redaxo-User-Id des jeweiligen Bewacher-Benutzer übergeben werden (per URL-Parameter uid=user_id). Für die Seite wird kein Modul mehr zur Verfügung gestellt (Einzeiler, kann per copy & paste aus der Beschreibung übernommen werden).

Falls Kategorien und/oder Medienkategorien geschützt werden, für die ein Redaxo-Redakteur zuständig ist, ist dieser auch authentifiziert, wenn er im Backend eingeloggt ist.

1.8

Für REDAXO
^5.3.0
Veröffentlicht am
31.07.2019

Ergänzung einer weiteren Formularseite zur Authentifizierung eines beliebigen weiteren Benutzers (für mögliche andere Anwendungen), unter Nutzung einer weiteren Session-Variablen.
Die Passwörter werden jetzt verschlüsselt abgelegt (rex_login::passwordHash($pwd)) und in verschlüsselter Form abgeprüft (rex_login::passwordVerify($pwd,$encr_pwd)).

1.7.2

Für REDAXO
^5.3.0
Veröffentlicht am
25.07.2019

Die Abmeldung nach erfolgreicher Authentifizierung funktioniert jetzt vorschriftsmäßig.

1.7.1

Für REDAXO
^5.3.0
Veröffentlicht am
12.07.2019

Ergänzung für den Verweis auf eine Mediadatei in der Form 'index.php?rex_media_file=FILE&rex_media_type=TYPE'.
Die Datei wird auch gefunden und angezeigt, wenn sie außerhalb des Ordners media liegt und TYPE über den Effekt mediapath ('Datei: Pfad anpassen') den zugehörigen Ordner liefert.

1.7

Für REDAXO
^5.3.0
Veröffentlicht am
28.06.2019

Verzicht auf eine eigene Funktion 'sendFile', stattdessen wird
'rex_response::sendFile' verwendet.
Parameter- und CSS-Klassennamen werden jetzt als benannte Konstanten abgelegt.
Im LogIn-Formular und im Modul werden die sprachabhängigen Texte jetzt anhand der Sprach-Id ausgewählt, nicht mehr anhand des Sprach-Codes. Außerdem wird nach erfolgreicher Authentifizierung ein Abmelde-Button angezeigt.
Anstatt leerer oder nicht vorhandener Media-Dateien wird die Datei 'warning.jpg' des AddOns media_manager angezeigt.

1.6.2

Für REDAXO
^5.3.0
Veröffentlicht am
05.03.2019

Verbesserung der Dokumentation im Bereich der Konfiguration und Verlegung aller Styles in die Stylesheet-Datei.

1.6.1

Für REDAXO
^5.3.0
Veröffentlicht am
05.03.2019

Ein dummer Fehler im Installations-Script ist behoben.

1.6.0

Für REDAXO
^5.3.0
Veröffentlicht am
02.03.2019

Der gesamte Source-Code ist jetzt auf UTF-8 umgestellt.
Der Code ist mit 'error_reporting(E_ALL);' überprüft.
Der AddOn-Modul zur Erzeugung eines LogIn-Formulars ist jetzt komplett zweisprachig und kann gleichermaßen im deutschen wie auch im englischen Zweig verwendet werden.
Die Überprüfung, ob ein Besucher als ycom-User eingeloggt ist, ist ausgebaut.

1.5.0

Für REDAXO
^5.3.0
Veröffentlicht am
11.02.2019

Schlüssel von neu definierten assoziativen Arrays werden jetzt als Konstanten (in Apostrophs) behandelt.

1.4.0

Für REDAXO
^5.3.0
Veröffentlicht am
11.07.2018

Jetzt werden bei der Ausgabe von Bildern auch die Medientypen gemäß Redaxo Media Manager berücksichtigt.

1.3.0

Für REDAXO
^5.3.0
Veröffentlicht am
08.07.2018

Jetzt lassen sich alle Konfigurationsparameter einzeln zurücksetzen bzw. löschen.

1.2.0

Für REDAXO
^5.3.0
Veröffentlicht am
06.06.2018

Alle Funktionen der Klassen access_control und access_control_install werden jetzt vorschriftsmäßig als "public static function ..." deklariert.
Bei der De-Installation werden die Konfigurationsvariablen jetzt aus der Tabelle rex_config entfernt.

1.1.0

Für REDAXO
^5.3.0
Veröffentlicht am
19.05.2018

Bei großen Dateien (> 250 MB) produzierte rex_managed_media::sendMedia() einen Speicherüberlauf.
Die Ausgabe der Mediendateien erfolgt auf diesem Wege jetzt nur noch für Bilder, PDF-Dokumente und Plaintext. Andere Dokumente werden mit einer modifizierten Version von rex_response::sendFile(...) ausgegeben.
rex_response::sendFile selbst liefert Dateien aus dem Browser-Cache, d.h. nach einem LogIn würde weiterhin 'protected.gif' angezeigt.

1.0.0

Für REDAXO
^5.3.0
Veröffentlicht am
11.05.2018

Dieses AddOn ermöglicht einen Zugriffsschutz für ausgewählte Bereiche von Artikeln beziehungsweise Mediendateien. Es ist komplett zweisprachig eingerichtet (deutsch, englisch).