Kürzlich habe ich eine Projektanfrage ein kleineres Download-Portal erhalten. Die Inhalte sollen nur registrierten Benutzern zur Verfügung stehen. Diese wiederum sind in sechs geografische Regionen unterteilt. Dabei darf Region A die Dokumente der Region B nicht sehen. Pro Region soll ein Administrator erweiterte Upload-Rechte erhalten, eine Rolle «Geschäftsleitung» schliesslich soll freien Zugriff auf alle Bereiche erhalten. Zugriff erhalten sollen ingesamt rund 100 Personen, darunter auch einige firmenexterne Benutzer.
Ein Extranet-Projekt also.
Entsprechend zurückhaltend war meine erste Reaktion. Denn mein beruflicher Schwerpunkt liegt im Bereich Marketing. Und irgendwie sind die Zeiten vorbei, als man für eine KMU-Website mal eben noch einen «geschützten Bereich» erstellte: Websites und Extranet sind im Jahr 2020 zwei völlig unterschiedliche Welten. Meine Lust auf sehr kundenspezifische Lösungen ist zudem nicht allzu ausgeprägt, dazu gerne ein andermal mehr.
Anderseits handelt es sich um einen langjährigen Kunden, der nicht zu einer grösseren Agentur gehen wollte. Nextcloud (die ich für mein Kleinunternehmen selber nutze) war definitiv eine Nummer zu gross für die Aufgabe. Mit der Office-Anwendung meines Hosting-Partners wiederum sind die geforderten Berechtigungen so nicht umsetzbar.
Also doch mal überlegen, ob sich das mit Backdrop CMS und ein paar Modulen nicht doch recht einfach lösen lässt...
Eine Frage der Rechte
Das Modul Content Access für Backdrop CMS erlaubt die Zugriffsteuerung für Inhalte. In unserem Fall sind das die Bereichsseiten für die sechs Regionen: Region A soll ja, wie gesagt, Region B nicht sehen. Das passt schon mal gut, pro Region sind nur sehr wenige Inhaltsseiten erforderlich. Passt.
Jedoch kann das Content-Access-Modul keine Zugriffe auf Dateien steuern – und genau darum geht es ja: auch wenn die URL einer Datei bekannt ist, darf diese nicht ohne weiteres sichtbar sein. Dazu nutzt Backdrop CMS prinzipiell das private Dateisystem. Der Entscheid, das Extranet wirklich mit Backdrop CMS umzusetzen, war schliesslich die Verfügbarkeit des Moduls Private files download permission. Das Modul erweitert das private Dateisystem und erlaubt die Vergabe von Download-Rechten pro Verzeichnis, pro Benutzer und pro Benutzerrolle.
Wohin mit den Uploads?
Neben den Download-Rechten spielt der Upload-Prozess eine ebenso wichtige Rolle. Er soll für berechtigte Personen nicht nur im Frontend, sondern pro Bereich möglich sein. Uploads von Editor A sollen also unmittelbar in der Region A erscheinen, ohne dass man dies manuell zuweisen muss.
Hier kommt das Modul Entity Tokens ins Spiel. Tokens sind Systemvariablen, die sich dynamisch einsetzen lassen. In unserem Fall bei der Definition der Verzeichnisse, in denen Uploads gespeichert werden sollen: pro Region in einem separaten Ordner – wir erinnern uns: die Download-Rechte sind ordnerbasiert.
Auch die Uploads werden über Berechtigungen eingeschränkt, damit die URL für sich genommen noch nicht zum Upload berechtigt.
Inhaltstyp für den Upload erstellen
Die Dateien selber lade ich über einen neuen Inhaltstyp "Downloads". Dazu ein Feld "Beschreibungen" und für den Upload die schicke Drag&Drop-Lösung Resumable Upload. Mehr brauchts auf der Seite Upload eigentlich gar nicht.
Steuerung der Datenausgabe
Kein Projekt in Backdrop-CMS ohne Views: die optische Benutzeroberfläche erlaubt auch anspruchsvolle Datenbankabfragen. In unserem Fall die Ausgabe der geladenen Dateien pro Region. Im Moment habe ich dies noch nicht sehr elegant gelöst (ein View pro Region), für die erste Testversion ist es aber ausreichend. Hier werde ich sicher noch eine Lösung per Kontextabfrage finden. Auch noch etwas unschön: Views arbeitet nicht in allen Ansichtsmodi mit Private Files Download Permission zusammen. In der Tabellenansicht der Dateien werden die Zugangsbeschränkungen nicht berücksichtigt, mit "Rendered Mode" hingegen klappt es. Ich werde den Fehler sicher bald mal melden und mit schauen, wie er behoben werden kann.
Verfeinern und verbessern
Damit steht die Grundfunktionailtät unseres Extranets bereits, und der erste Test mit dem Kunden kann losgehen. Natürlich sind noch viele Details im Bereich User Experience zu lösen, wie etwa
- der Versand eine Benachrichtigung bei Datei-Uploads (etwa mit Rules),
- ein besserer Bereich für Benutzeranmeldung und Benutzerverwaltung (etwa mit Login Destination),
- ein Dashboard, wo man kürzlich vorgenommen Änderungen einsehen kann.
Aber insgesamt hat mich Backdrop CMS einmal mehr begeistert: die Module spielen zusammen, die Plattform ist ausgereift und fast jedes Datenmodell lässt sich per Konfiguration umsetzen.
Kommentare
Xela
Sehr elegant!
Fr., 13.11.2020 - 11:47Eine verblüffend einfache Lösung mit nur einer handvoll Modulen. Vielen Dank für die Anleitung - werde ich so ähnlich vielleicht auch mal brauchen.