Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在symfony2中对每个请求进行自定义投票者呼叫_Symfony_Authorization - Fatal编程技术网

如何在symfony2中对每个请求进行自定义投票者呼叫

如何在symfony2中对每个请求进行自定义投票者呼叫,symfony,authorization,Symfony,Authorization,我读到这个问题: 所以 我已经根据上的说明创建了一个自定义投票者。 这是我对投票人的服务定义 xml_menu: class: "%xml_menu.v1.class%" arguments: [""] route_voter: class: "%route_voter.class%" arguments: [@request_stack, @xml_menu ] public: false tags: - { name: sec

我读到这个问题:
所以 我已经根据上的说明创建了一个自定义投票者。 这是我对投票人的服务定义

xml_menu:
    class: "%xml_menu.v1.class%"
    arguments: [""]

route_voter:
    class: "%route_voter.class%"
    arguments: [@request_stack, @xml_menu ]
    public: false
    tags:
        - { name: security.voter }    
这是我的防火墙配置:

    test_secured_area:
        pattern: ^/test/
        form_login:
            check_path: _demo_security_check
            login_path: _demo_login
        logout:
            path:   _demo_logout
            target: _demo

access_control:
我故意使用演示登录路径,并将访问控制留空。 我已经手动测试了“route_voter”服务,知道它可以工作。但是它的load方法不会在任何请求中自动调用。这种行为应该是并且我每次都必须调用安全上下文的
isgrated()
方法,例如在我的控制器开始时,还是我做错了什么?
如果这是它应该工作的方式,我怎么能强迫选民在每一个请求时都被呼叫

我在这里试图实现的是类似于访问控制的行为,如果用户有权访问路由,投票人返回
VoterInterface::access\u grated
,否则,它返回
VoterInterface::access\u DENIED
。我希望访问控制限制基于此。

当前发生的情况是,每次尝试访问/test/foo时,我都会被重定向到登录页面,而当我登录时,我会被重定向到hostname/。然后每次我尝试访问/test/foo时,我都会被重定向到演示登录页面。但是,当我访问演示安全区域时,它显示我已通过身份验证。那么,我是否必须为/test/*路径激活一些内容,以便symfony读取会话并对我进行身份验证,这样我就不会被重定向回登录页面?

问题在于检查路径。正如它在登录表单的身份验证中所述,是针对check_path路由所处的防火墙上下文进行的。因此,身份验证是针对演示防火墙而不是我创建的防火墙进行的。因此,为了修复它,我做了两件事
  • 我为check_path创建了一个新路由
  • 我在登录表单中替换了该路由表单操作中的模板
  • 另一种解决方案是通过给他们相同的名字来共享他们的防火墙上下文