user2178964
user2178964

Reputation: 154

Symfony 2 : Redirect a user to a page if he has a specific role

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

Answers (1)

Manse
Manse

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

Related Questions