Ich benutze Symfony2 und habe bereits Benutzer und Rollen in meiner Datenbank gespeichert. Wenn ich in security.yml
etwas wie unten eingestellt habe, funktioniert es großartig:
Aber ich möchte diese access_control Informationen in der Datenbank speichern, damit der Benutzer von meinem System die Berechtigungen selbst ändern kann, indem er die Verwaltungsschnittstelle verwendet.
Ich habe mir ACL und FOSUserBundle angeschaut, konnte aber dafür keine Lösung finden. Ich fand, dass ich Berechtigungen mit etwas wie if ($user->hasRole($role))
überprüfen konnte, aber ich würde dies in jedem Controller tun müssen.
Gibt es eine Möglichkeit, eine dynamische "access_control" -Funktion zu definieren? Vielleicht etwas wie das Umleiten der access_control zu einer Klasse, die wahr oder falsch zurückgeben könnte. Irgendeine Lösung?
Der beste Weg wäre, eine bestimmte Rolle (z. B. DB_ROLE_CHECK
) einzurichten, die Sie für Ihre Aktionen / Dienste festgelegt haben, die für Ihre Datenbankrollen validiert werden sollen.
Dann würden Sie einen Sicherheits-Voter erstellen, der sich in DB_ROLE_CHECK
einklinkt und Ihre Anfrage gegen Ihre Datenbankeinträge validiert.
Siehe:
Die Zugriffskarte ist hier erstellt >.
Wenn keine access_control gefunden wird, wird nichts unternommen.
Definieren Sie nun Ihre eigene Implementierung der AccessMapInterface und überschreiben Sie den Parameter security.access_map. Klasse mit Ihrer Klasse.
Sie werden wahrscheinlich eine Fabrik benötigen, um Ihre AccessMap zu erstellen.