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 }
我在 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 }