Rediriger un utilisateur vers une URL en fonction de son rôle sur Symfony2

dans Symfony2

Utiliser l'event security.interactive_login, déclenché lorsqu'un utilisateur s'identifie via le formulaire de connexion.

Créer la classe

use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;

class EspaceClientRequestListener
{

    protected $security;
    protected $router;
    protected $dispatcher;

    public function __construct($security, $router, $dispatcher)
    {

        $this->security = $security;
        $this->router = $router;
        $this->dispatcher = $dispatcher;

    }

    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
    {
        $this->dispatcher->addListener(KernelEvents::RESPONSE, array($this, 'onKernelResponse'));
    }

    public function onKernelResponse(FilterResponseEvent $event)
    {

        //__ On redirige si l'utilisateur à la rôle ROLE_ADMIN
        if( $this->security->isGranted('ROLE_ADMIN') ) {

            $event->getResponse()->headers->set('Location', $this->router->generate('app_admin_homepage'));

        }

    }
}

Créer le service

Dans le fichier config.yml :

services:
    kernel.listener.your_listener_name:
        class: App\EspaceClientBundle\Listener\EspaceClientRequestListener
        arguments: [ @security.context, @router, @event_dispatcher ]
        tags:
            - { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin }
Posté il y a par keepcodeclear.
Uncaught Exception

Uncaught Exception

Module 'mysqli' already loaded

Origin

on line 0

Trace

#0 [internal function]: System\Error::shutdown()
#1 {main}