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 }