我正在尝试使用ACL,并且根据建议我将安全策略切换为unanimous
。
此后,多个网址不授权我的用户再访问。
但是它应该根据我的防火墙配置(我能够使用默认策略控制它)。
我理解,如果至少有一位选民不批准,一致的策略会拒绝访问。
所以问题是:
对于拒绝访问的特定请求,
如何知道哪些是参与选民,以便知道哪一个拒绝访问?
答案 0 :(得分:2)
自从将 access_decision_manager 策略转换为一致后,我遇到了同样的问题。从Symfony 2.4开始,表达式默认内置,我用它来解决这个问题。
我的访问控制使用多个角色:
access_control:
- { path: ^/, roles: [ROLE_ADMIN, ROLE_MANAGER, ROLE_EDITOR] }
更改为:
access_control:
- { path: ^/, allow_if: "has_role('ROLE_ADMIN') or has_role('ROLE_MANAGER') or has_role('ROLE_EDITOR')" }
它解决了一致的问题,希望它可以帮助你或那里的任何人。
答案 1 :(得分:0)
在被拒绝访问的情况下,我无法找到相关选民的方法,但是:
我终于找到了被拒绝的内容:使用一致的策略,当您的security / access_control定义针对多个角色的路由时,必须授予您的所有用户访问权限。这实际上是合乎逻辑的......
这不能回答这个问题,但我认为在使用一致的安全策略时要记住这一点。
答案 2 :(得分:0)
对于你的问题:如何知道哪些参与选民才知道哪一个拒绝访问?
答案:您应该在服务中搜索标签名称“security.voter”。 所有安全选民都以这种方式登记。 所有这些选民都被使用。
对于以下部分:对于拒绝访问的给定请求,
答案:
由于每个请求对安全选民采用不同的方法,基于令牌,几乎不可能看到哪个选民在没有调试的情况下拒绝您访问。如果你真的想知道的话,可以使用像Xdebug这样的工具来查看选民的流动。
您可以对代码进行单元测试,以查看在某个请求时是否可以访问它。