我有一个小问题。我希望用户在我网站上的任何位置,如果他具有“ROLE_DEGRADE”角色,他就会被重定向到特定页面。
我该怎么做,我必须使用防火墙?我不想将用户重定向到表单登录,只是到一个简单的页面。我希望在我的网站上随处可见,而不是在所有控制器中随处放置“如果角色降级......”......
谢谢你的帮助 ;)
我有一个小问题。我希望用户在我网站上的任何位置,如果他具有“ROLE_DEGRADE”角色,他就会被重定向到特定页面。
我该怎么做,我必须使用防火墙?我不想将用户重定向到表单登录,只是到一个简单的页面。我希望在我的网站上随处可见,而不是在所有控制器中随处放置“如果角色降级......”......
谢谢你的帮助 ;)
像这样的事情应该这样做......
创建一个新的监听器:
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 }
文档: