如何在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路由所处的防火墙上下文进行的。因此,身份验证是针对演示防火墙而不是我创建的防火墙进行的。因此,为了修复它,我做了两件事