1

我正在尝试使用 ACL,并按照建议将安全策略切换为unanimous.

从那时起,几个 URL 不再授权我的用户访问。
但是它应该根据我的防火墙配置(我可以使用默认策略来控制它)。

我知道,如果至少有一个选民不同意,一致的策略就会拒绝访问。

所以问题是:

对于在拒绝访问的情况下的给定请求,
如何知道哪些是所涉及的选民以便知道哪个是拒绝访问?

4

3 回答 3

3

自从将access_decision_manager策略切换为unanimous后,我遇到了同样的问题。从 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')" }

它解决了一致的问题,希望它可以帮助你或那里的任何人。

于 2014-03-03T03:30:00.470 回答
0

在被拒绝访问的情况下,我无法找到查看相关选民的方法,但是:

我终于找到了被拒绝的东西:使用一致的策略,当您的 security/access_control 定义针对多个角色的路由时,您的用户必须被授予所有人访问权限。其实是合乎逻辑的...

这并不能回答问题,但我认为在使用一致的安全策略时要牢记这一点。

于 2013-06-11T12:58:58.273 回答
0

对于您的问题:如何知道哪些是相关选民才能知道哪个拒绝访问?

答案:您应该在您的服务中搜索标签名称“security.voter”。所有安全选民都以这种方式登记。所有这些选民总是被使用。

对于部分:对于被拒绝访问的给定请求,

答案:

由于每个请求对安全投票者都有不同的方法,基于令牌,几乎不可能在没有调试的情况下查看哪个投票者拒绝了您的访问。如果你真的想知道,可以使用像 Xdebug 这样的工具来查看选民的流动情况。

您可以为您的代码进行单元测试,以查看它在某个请求时是否可以访问。

于 2013-12-16T13:45:06.890 回答