【问题标题】:Symfony 2 : Redirect a user to a page if he has a specific roleSymfony 2:如果用户具有特定角色,则将用户重定向到页面
【发布时间】:2013-06-03 01:40:43
【问题描述】:

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

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

感谢您的帮助;)

【问题讨论】:

  • 您可能想要使用事件监听器。手边没有一个很好的例子,但它应该是直截了当的。

标签: redirect symfony firewall roles access-control


【解决方案1】:

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

创建一个新的监听器:

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 }

文档:

【讨论】:

  • 太好了,我只需要添加一个“if”测试来了解我是否不在“URL 页面”上,以避免无限循环。我也有一个问题:调试工具栏向我显示一个警报,所以我禁用它但你知道我该怎么做吗?
  • @user2178964 检查路线 - 如果它的工具栏忽略它
猜你喜欢
  • 1970-01-01
  • 2021-12-02
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
相关资源
最近更新 更多