dedlfix: User Berechtigungen im Framework

Beitrag lesen

Tach!

Generell kann entweder die Controller-Action selber auf das Userobjekt zugreifen und so Berechtigungen übeprüfen

Eigentlich ist das nicht deren Aufgabe. Wenn man zumindest versucht nach Single Resposibility zu programmieren, dann hat man da schon ein "und" in der Beschreibung der Funktion: "Prüfen der Berechtigung und Ausführen von Wasauchimmer".

Wenn im Controller Zugriff auf das Benutzerobjekt besteht, könnte zB ein AuthorizationChecker die Rechteüberprüfung basierend auf dem aktuellen Benutzer vornehmen. Im Symfony-Framework sieht das beispielsweise so aus:

<?php

class ExampleController
{
    public function secureAction()
    {
        if (!$this->get('security.authorization_checker')->isGranted('ROLE_USER')) {
            throw new \Exception('Access Denied.');
        }

        // [...]
    }
}

Sehr unhübsch. Man braucht einen Magic-String, um mit dem get() ein Objekt zu holen. In anderen Worten, man braucht einen Wert, um auf bestimmten Code zugreifen zu können. Damit kann man nur schwer Tools verwenden, die den Code analysieren und einem beim Entwicklen helfen können. Das ist aufgrund der Dynamic von PHP (z.B. wenn eine Funktion unterschiedliche Typen zurückgeben kann) sowieso schon eine Herausforderung, aber Magic Strings setzen dem noch die Krone auf. "Find usages" wird unbrauchbar, weil der Analyzer nicht wissen kann, dass der String sich auf Code bezieht.

dedlfix.