Symfony2 防火墙规则未按预期工作

Symfony2 Firewall rules are not working as expected

我在 security.yml 配置的访问控制部分指定了两个规则,如下所示:

 - { path: ^/logout,      role: IS_AUTHENTICATED_REMEMBERED }
 - { path: ^/admin,       role: ROLE_ADMIN }

但是在这两种情况下,用户匿名用户都可以访问这两个页面,并且在工具栏中的管理员情况下,我可以看到 anon. 变成了 admin 我做错了什么?

这些规则看起来不错,问题可能出在防火墙配置的另一部分。请post吧。

最有可能的是,您的规则列表中较早的时候有另一个规则与这些路径相匹配。例如,当您有

- { path: ^/,       role: IS_AUTHENTICATED_ANONYMOUSLY }

在您的规则列表之上,它将匹配所有路径,而不会评估其他规则。在这种情况下,请确保将该规则移至列表末尾。

如果不是这种情况,请扫描您的防火墙配置以查找您使用 security: false 的部分并查看模式。

然后还有打击自己的场景,你的角色层次结构被配置为让ROLE_ADMIN被匿名用户继承。但事实并非如此吧?

另外,请注意,当您定义类似 ^/admin 的路径时,它也匹配 ^/administration 和所有其他以 /admin 开头的路径。这对你来说可能没问题,但是当你想确保你只排除 /admin 并且像 /admin/foo 这样具有这两个规则的每个子路径可能更适合你的需要时:

 - { path: ^/admin$,       role: ROLE_ADMIN }
 - { path: ^/admin/,       role: ROLE_ADMIN }