Reputation: 154
I have a little question. I want that wherever is the user on my website, if he have the role "ROLE_DEGRADE", he is redirected on a specific page.
How I can do that, I have to use firewall ? I don't want to redirect the user to a form login, just to a simple page. I want that everywhere on my website, without put a "if role degrade..." everywhere, in all my controllers...
Thanks for your help ;)
Upvotes: 3
Views: 3590
Reputation: 38147
Something like this should do it ...
Create a new listener :
class AccessListener
{
private$security;
private $router;
public function __construct($security, $router)
{
$this->security = $security;
$this->router = $router;
}
public function onKernelRequest(GetResponseEvent $event)
{
if ($this->security->isGranted('ROLE_DEGRADE')) {
$url = $this->router->generate('<route name>');
$event->setResponse(new RedirectResponse($url));
}
}
}
Add it to your services.yml
:
services:
access_listener:
class: Acme\DemoBundle\Listener\AccessListener
arguments: [ @security.context, @router ]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
Docs :
Upvotes: 5