Symfony2: Wie überprüft man, ob eine Aktion gesichert ist?

8

Ich möchte von einem Controller aus prüfen, ob es sich um eine gesicherte Seite handelt oder nicht. Wie geht das?

Mein Anwendungsfall ist der folgende:

  • Der Benutzer kann sich registrieren und anmelden
  • Wenn er sich anmeldet und versucht, auf eine gesicherte Seite zuzugreifen, wird er bis Ende Juni auf eine "Betaversion" Seite weitergeleitet.
  • Wenn er versucht, auf eine normale Seite (nicht gesichert) zuzugreifen, kann er ohne Umleitung darauf zugreifen.

Danke für Ihre Hilfe!

Aurel

    
Aurel 10.04.2012, 13:31
quelle

2 Antworten

15

Wenn Symfony2 eine Anfrage verarbeitet, entspricht sie dem URL-Muster mit jeder in app/config/security.yml definierten Firewall. Wenn das URL-Muster mit einem Muster der Firewall übereinstimmt, erstellt Symfony2 einige Listener-Objekte und ruft die Methode handle dieser Objekte auf. Wenn ein Listener ein Response -Objekt zurückgibt, bricht die Schleife ab und Symfony2 gibt die Antwort aus. Der Authentifizierungsteil wird in Authentifizierungs-Listenern ausgeführt. Sie werden aus der in der angepassten Firewall definierten Konfiguration erstellt, z. B. form_login , http_basic usw. Wenn der Benutzer nicht authentifiziert wird, erstellen authentifizierte Listener ein RedirectResponse -Objekt, um den Benutzer zur Anmeldeseite umzuleiten. In Ihrem Fall können Sie schummeln , indem Sie einen benutzerdefinierten Authentifizierungslistener erstellen und ihn in Ihre Firewall für gesicherte Seiten einfügen. Beispielimplementierung würde folgen,

Erstellen Sie eine Klasse Token ,

%Vor%

Erstellen Sie eine Klasse, die AuthenticationProviderInterface implementiert. Für form_login Listener authentifiziert es sich mit der angegebenen UserProvider . In diesem Fall wird es nichts tun.

%Vor%

Erstellen Sie eine Einstiegspunktklasse. Der Listener erstellt ein RedirectResponse aus dieser Klasse.

%Vor%

Erstellen Sie eine Listener-Klasse. Hier implementieren Sie Ihre Umleitungslogik.

%Vor%

Erstellen Sie die Dienste.

%Vor%

Registrieren Sie den Listener. Erstellen Sie einen Ordner namens Security/Factory im Ordner DependencyInjection des Bundles. Dann erstellen Sie die Factory-Klasse.

%Vor%

Fügen Sie in Ihrem NamespaceBundle.php Ihres Bundle-Ordners folgenden Code hinzu:

%Vor%

Authentifizierungs-Listener ist erstellt, puh :). Jetzt in Ihrem app/config/security.yml folgendes tun.

%Vor%     
Mun Mun Das 12.04.2012, 11:48
quelle
0

Ich weiß nicht, ob das die richtige Methode ist Aber Sie können Folgendes versuchen

/vendor/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php hat eine Methode handleRaw , die eine Anfrage in eine Antwort konvertiert. Auf das Anfrageobjekt kann von dort zugegriffen werden. Sie können überprüfen, ob der Client den Zugriff auf die gesicherte Seite angefordert hat. Wenn ja, können Sie den Controller wie

manuell einstellen %Vor%

Eine andere Lösung wäre, eine Sitzung zu setzen, wenn der Benutzer versucht, auf eine gesicherte Seite zuzugreifen und nach dem gleichen in Ihrem Controller zu suchen

Auch dies ist möglicherweise nicht die richtige Methode, aber es ist eine mögliche Problemumgehung

    
Sethunath 11.04.2012 07:26
quelle

Tags und Links