27.012016

PHP Role Based Access Control

Heute möchte ich Euch eine Library vorstellen, die Euch beim Arbeiten mit unterschiedlichen Rechten in Eurem Webprojekt unterstützen kann. Ihr werdet vielleicht jetzt sagen: "Ach, in meinem Projekt gibt es nur einen Admin-Account und den verwendet ich. Da habe ich Ausnahmen für den Account implementiert". Was aber passiert, wenn es plötzlich einen weiteren Admin-Account geben muss, weil Euer Projekt wächst und Ihr gerne einen Redakteur oder Moderator einrichten möchtet?

Richtig, Ihr müsst überall die Ausnahmen umschreiben bzw. erweitern. Wenn aber von Anfang an auf eine, auf Rollen basierende, Zugriffskontrolle gesetzt wird, dann muss nur eine neue Rolle mit eingeschränkten Rechten eingeführt werden und am restlichen Quellcode sind keine Erweiterungen notwendig. Dies setzt aber auch vorraus, dass Ihr Euch direkt von Anfang an Gedanken über sinnvolle Aufteilung der Rechte macht und nicht alle Funktionalitäten mit dem gleichen Recht verseht. Aber es lässt auch noch genug Spielraum eine bestehende Funktionalität mit einem neuen Recht zu versehen, ohne große Änderungen oder extra Ausnahmen.

Nun stellt Ihr Euch vielleicht die Frage, was mit der Logik für die Rollen ist, wir ihr das implementiert bekommen. Hier kommt die Library ins Spiel, die ich Euch vorstellen möchte. Bei einer meiner letzten Projekte bin ich im Rahmen meiner Suche nach Möglichkeiten/Ansetzen für Zugriffskontrollen auf PHP-RBAC gestoßen. Bei meinen Tests empfand ich die offiziellen Releases etwas unschön, was die Implementierung in eigene Projekte angeht, vor allem, wenn man Composer einsetzt, da die Library einen festen Platz für die Konfiguration-Datei vorgibt und es nicht möglich ist die Konfiguration beim Holen einer neuen Instanz mitzugeben. Hier hat sich für mich die inoffizielle Weiterentwicklung als deutlich praktikabler und einfach zu verwenden gezeigt.

Beide Versionen der Library haben gemeinsam, dass sie nur die Logik zum Kombinieren und Gruppieren der Rechte zur Verfügung stellen. Für eine Verwaltung muss man trotzdem noch selber sorgen, diese kann man aber somit auch viel besser in sein eigenes Projekt integrieren.

Werft doch mal einen Blick drauf, vielleicht ist es etwas für Euer nächstes oder aktuelles Projekt.