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