Die meisten Websites haben auch heute noch eher Broschürencharakter. Sie beschreiben eine Firma, ein Produkt oder einen Service. Manchmal gibt es auch interaktive Elemente wie News, einen Blog oder ein Kontaktformular. Wenn es interaktiver wird, benutzen die meisten Betreiber von Websites heute das Content Management System WordPress. Es gibt tausende von Erweiterungen und man muss nicht programmieren um beispielsweise einen Online-Shop aufzusetzen.
Wenn man allerdings etwas sehr Individuelles und Interaktives aufsetzen will, stösst man bei fertigen Erweiterungen schnell an Grenzen.
Als ich die Seite für das Klassentreffen aufsetzte (Die Liste im Netz ...), dachte ich ebenfalls erst an WordPress. Ich probierte ein paar Community Plugins aus, wie beispielsweise BuddyPress, fand mich aber nicht wieder. Ich wollte kein komplettes Social Netzwerk, sondern eher eine sauber strukturierte Basis, die mit dem Kenntnisstand der Teilnehmer wachsen kann. Die fertigen Lösungen hatten viel zu viele Features und vor allem war es nicht einfach, ein "ganz einfaches Thema" zu lösen.
Manche Teile der Seite sollen öffentlich zugänglich sein, andere nicht.
Die Startseite und paar andere Seiten wie anstehende Events oder News sollen natürlich öffentlich zugänglich sein. Hochgeladene Bilder sind manchmal öffentlich, manchmal nicht. Benutzerprofile sollten auf keinen Fall sichtbar sein.
Verhalten von Core Drupal
Im Standard Drupal hat man die Wahl, ob man einen Inhalt eines Inhaltstypen veröffentlicht oder nicht. Wenn er veröffentlicht ist, ist er, je nach Einstellungen in den Berechtigungen für alle Besucher (Gäste) öffentlich sichtbar oder eben nicht.
Die Rechte für die Bearbeitung dieser Inhalte sind über ein erweiterteres Rollenmodell sehr fein einstellbar. Nun muss man ja auch an die hochgeladenen Bilder denken. Selbst wenn der Inhalt "an sich" geschützt ist, dürfen die Bilder ja nicht über einen öffentlichen Link erreichbar sein.
Herausforderungen
Das heisst:
- Manche Inhalte sind unter Umständen über ihren Link erreichbar, ohne dass man das vielleicht will.
- Dateien, die hochgeladen werden sind standardmässig in einem öffentlichen erreichbaren Verzeichnis und damit ebenfalls über ihren Link erreichbar
Ein privates Dateisystem
Bevor du Daten über ein Dateifeld hoch lädst, musst du in der settings.php Datei ein privates Verzeichnis definieren (Set up a private file path).
$settings['file_private_path'] = '/home/meinverzeichnis/private-files';
Wenn diese Konfiguration eingetragen ist, erscheint in den Feldeinstellungen die Auswahl zwischen einem öffentlichen und einem privaten Verzeichnis.
Achtung: Diese Einstellung kann nicht mehr geändert werden, wenn bereits Daten vorhanden sind.
Im Ergebnis werden die Bilder nun über PHP ausgeliefert. Der echte Pfad bleibt verborgen. Der Link auf eine private Datei sieht etwa so aus: https://abi-1984.de/system/files/2019-09/48676342753_872ca1ac16_k.jpg. Die Anforderung wird an das Drupal gegeben und die Berechtigungen werden überprüft. Hinter dem Wort system im Pfad verbirgt sich der echte Pfad. Ist man angemeldet und verfügt über die entsprechenden Berechtigungen, wird die Datei ausgeliefert, ansonsten erscheint eine Fehlermeldung.
Jeder Inhalt kann öffentlich sichtbar sein oder eben nicht
Jedes CMS unterscheidet zwischen veröffentlichten und nicht veröffentlichten Beiträgen. Die Unterscheidung ist wichtig bei der Erstellung des Beitrags und irgendwann ist er dann fertig und wird veröffentlicht.
Wer diesen Inhalt dann aber sehen kann ist ein völlig anderes Thema. Ein Beitrag könnte ja auch nur für eine bestimmte Nutzergruppe sein (alle Administratoren, alle Mitarbeiter, etc)
Das Modul Permissions by Terms löst das Problem auf sehr elegante Weise.
Installiere dieses Modul.
Drupal verwaltet Vokabulare (Taxonomies) mit Begriffen (Terms). Diese Vokabulare können Inhaltstypen zugeordnet werden.
Wenn man nun ein Vokabular Zugriff anlegt, das aus den Begriffen Öffentlich und Nicht öffentlich besteht ...
Vokabular Zugriff
... und dieses Vokabular einem Inhaltstyp zuordnet ...
Vokabular Zugriff in einem Inhaltstyp als Feld
... so lässt sich nach einem Klick auf Bearbeiten ein Standardwert festlegen, nämlich nicht öffentlich. Ausserdem mache ich das Feld zu einem Pflichtfeld, so dass der, der den Inhalt anlegt, eine Entscheidung treffen muss.
Feld Zugriff bearbeiten
Die Person, die das Bild hochlädt und den Inhalt erzeugt, sieht eine einfache Auswahl, bei der Nicht öffentlich bereits vorausgewählt ist. Das rote Sternchen zeigt an, dass es sich um ein Pflichtfeld handelt.
Eingabemaske
Berechtigungen für Begriffe vergeben
Als letzte Tat müssen nun noch die berechtigten Rollen den Begriffen öffentlich und nicht öffentlich zugeordnet werden.
Nicht öffentlich
Öffentlich
Fazit
Die Herausforderung mit den Zugriffsberechtigungen zu öffentlichen und nicht öffentlichen Inhalten lässt sich in Drupal sehr elegant und benutzerfreundlich lösen.
tl;dr: Ein Drupal mit öffentlichen und nicht öffentlichen Inhalten ist einfach zu bewerkstelligen
Posted from my blog with SteemPress : https://blog.novatrend.ch/2019/09/23/oeffentliche-und-nicht-so-oeffentliche-inhalte-in-drupal/