【问题标题】:Symfony2 HttpKernel Before and after methods in controllers (Kohana Style)Symfony2 HttpKernel 控制器中的前后方法(Kohana 风格)
【发布时间】:2013-02-12 11:28:10
【问题描述】:

我知道这个问题已经讨论过很多次了,但我找到了一些解决方案,但我不确定这是否是最好和最有效的方法。

我的问题:我正在使用 fosuserbundle 来处理用户身份验证,并且我还想阻止显示登录用户的登录、密码重置等表单。下面我提出一些方法:

  1. 第一个(已经实现)基于内核事件,有代码 https://gist.github.com/walmen/871c13014b80c6a3d05d
  2. 我的同事提到的第二种方法是基于方法重载(删除每个方法中的侦听器和重复代码,其中包含一些不应向登录用户显示的逻辑)
  3. 编写自定义注解,即@RequireAnonymous

正如我之前提到的,我已经实现了第一种方法,但我不确定它是否是最好和最有效的解决方案(每个请求都会调用此侦听器 - 这对应用程序来说不是太重的负载? 监听器如何影响应用程序?)。

第二种方法当然是最简单的一种,但是……代码重复听起来不太好。

最后一个可能是最好的,但如果我们看一下这个例子https://gist.github.com/cystbear/1391850,我们会发现在任何控制器调用期间调用事件也存在问题。

有什么好的论据和解释的建议或其他想法吗?

【问题讨论】:

    标签: php symfony annotations listener symfony-2.1


    【解决方案1】:

    如果我对您的理解正确,您可以使用包含在 Symfony 标准中的 JMSSecurityExtraBundle 的第三种方法。

    在您想要从经过身份验证的用户中排除的操作上,您可以这样做:

    /**
     * @Secure(roles="IS_AUTHENTICATED_ANONYMOUSLY")
     */
    public function fooAction()
    {
        // stuff...
    }
    

    这可确保请求特定路径的用户未经过身份验证。

    【讨论】:

      【解决方案2】:

      @Ramon 并不是因为每个用户都拥有 IS_AUTHENTICATED_ANONYMOUSLY 角色,即使是经过身份验证的用户。

      更重要的是,我们不想抛出“访问被拒绝”之类的异常,但我们想通过重定向“隐藏”这些页面。

      你觉得这个https://github.com/FriendsOfSymfony/FOSUserBundle/issues/996#issuecomment-14812806怎么样?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多