3

我有一个小问题。我希望用户在我网站上的任何位置,如果他具有“ROLE_DEGRADE”角色,他就会被重定向到特定页面。

我该怎么做,我必须使用防火墙?我不想将用户重定向到表单登录,只是到一个简单的页面。我希望在我的网站上随处可见,而不是在所有控制器中随处放置“如果角色降级......”......

谢谢你的帮助 ;)

4

1 回答 1

5

像这样的事情应该这样做......

创建一个新的监听器:

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 }

文档:

于 2013-06-07T08:37:21.833 回答