我在security.yml配置的访问控制部分中指定了两个规则,如下所示:
- { path: ^/logout, role: IS_AUTHENTICATED_REMEMBERED }
- { path: ^/admin, role: ROLE_ADMIN }
但是在这两种情况下,用户匿名用户都可以转到两个页面,并且在工具栏中的管理员情况下,我可以看到anon.
来admin
我做错了什么?
这些规则看起来不错,问题可能出在防火墙配置的另一部分。请张贴。
最有可能的是,您有另一个规则与规则列表中前面的这些路径匹配。例如,当您有
- { 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 }