Symfony 2:如果用户具有特定角色,则将其重定向到页面

问题描述:

我有一个问题。
我希望无论我网站上的用户是谁,如果他具有 ROLE_DEGRADE角色,他都会在特定页面上重定向。

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...

感谢您的帮助;)

类似的事情应该可以解决...

Something like this should do it ...

创建一个新的侦听器:

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));
        }
    }
}

将其添加到您的 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:

  • Checking roles
  • Event Listeners
  • Generating URLs