我有一个小问题。 我希望无论网站上的用户在哪里,如果他的角色为“ROLE_DEGRADE”,他就会被重定向到特定页面。
我怎么能这样做,我必须使用防火墙? 我不想将用户重定向到表单登录,只是简单的页面。 我希望在我的网站上无处不在,而不是在所有控制器中随处放置“if role degrade ......”......
感谢您的帮助;)
答案 0 :(得分: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 }
文件: