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

时间:2015-01-15 15:57:02

标签: php security symfony acl

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

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

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

1 个答案:

答案 0 :(得分:1)

这些规则看起来很好,问题可能出在防火墙配置的另一部分。请发布。

最有可能的是,您在规则列表的前面有另一个与这些路径匹配的规则。例如,当你有

- { 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 }