2016-08-01 52 views
2

Nachdem der Benutzer sein Passwort mit dem Passwort-Reset von FOSUserBundle zurückgesetzt hat, wird er standardmäßig zum FOSUserProfile weitergeleitet. Ich möchte entsprechend ihrer Rolle auf eine andere Route umleiten. Ist das möglich und wenn ja, wie? ich diesen Code, aber es alle Arten von Benutzer umleitenFOSUserBundle: Erfolgsziel nach dem Zurücksetzen des Passworts nach Rollen

namespace Acme\UserBundle\EventListener; 

use FOS\UserBundle\FOSUserEvents; 
use FOS\UserBundle\Event\FormEvent; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; 

/** 
* Listener responsible to change the redirection at the end of the password resetting 
*/ 
class PasswordResettingListener implements EventSubscriberInterface { 
    private $router; 

    public function __construct(UrlGeneratorInterface $router) { 
     $this->router = $router; 
    } 

    public static function getSubscribedEvents() { 
     return [ 
      FOSUserEvents::RESETTING_RESET_SUCCESS => 'onPasswordResettingSuccess', 
     ]; 
    } 

    public function onPasswordResettingSuccess(FormEvent $event) { 
     $url = $this->router->generate('homepage'); 
     $event->setResponse(new RedirectResponse($url)); 
    } 
} 

Und dann mit

services: 
    acme_user.password_resetting: 
     class: Acme\UserBundle\EventListener\PasswordResettingListener 
     arguments: [ "@router" ] 
     tags: 
      - { name: kernel.event_subscriber } 
+0

http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements – pavlovich

Antwort

0

Basierend auf Ihrer Version von Symfony ich es als Dienst registrieren Sie eines der beschriebenen Ansätze können wählen, in : http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

Zum Beispiel können Sie security.authorization_checker Service nutzen:

es in Ihren Dienst Spritzen :

services: 
    acme_user.password_resetting: 
     class: Acme\UserBundle\EventListener\PasswordResettingListener 
     arguments: [ "@router", "@security.authorization_checker" ] 
     tags: 
      - { name: kernel.event_subscriber } 

Dann in Ihrem aktuellen Service:

use Symfony\Component\Security\Core\Authorization\AuthorizationChecker; 

/** 
* Listener responsible to change the redirection at the end of the password resetting 
*/ 
class PasswordResettingListener implements EventSubscriberInterface { 
    private $router; 
    private $authorizationChecker; 

    public function __construct(UrlGeneratorInterface $router, AuthorizationChecker $authorizationChecker) { 
     $this->authorizationChecker = $authorizationChecker; 
     $this->router = $router; 
    } 

    public static function getSubscribedEvents() { 
     return [ 
      FOSUserEvents::RESETTING_RESET_SUCCESS => 'onPasswordResettingSuccess', 
     ]; 
    } 

    public function onPasswordResettingSuccess(FormEvent $event) { 

     //$url = $this->router->generate('homepage'); 
     //$event->setResponse(new RedirectResponse($url)); 

     if (false === $this->authorizationChecker->isGranted('ROLE_ADMIN')) { 
      // redirect somewhere 
     } else { 
      // redirect elsewhere 
     } 


    } 
}