我在security.yml配置的访问控制部分中指定了两个规则,如下所示:
- { path: ^/logout, role: IS_AUTHENTICATED_REMEMBERED }
- { path: ^/admin, role: ROLE_ADMIN }
但是在这两种情况下,用户匿名用户都可以访问这两个页面,而在工具栏中的管理案例中,我可以看到anon.
来admin
我做错了什么?
答案 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 }