假设我在access_control
下面有security.yml
块:
access_control:
- { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/reset-password, roles: IS_AUTHENTICATED_ANONYMOUSLY }
在这种情况下,每个人都可以输入homepage
和reset-password
页面。但我想仅允许匿名身份验证的用户使用这些页面。完全通过身份验证的用户应获得403 access denied error
或404 page not found
。
根据documentation和allow_if
我应该完全创建角色表达式来定义访问权限。但如果我这样做:
access_control:
- { path: ^/reset-password, allow_if: "has_role('IS_AUTHENTICATED_ANONYMOUSLY') and not has_role('IS_AUTHENTICATED_FULLY')" }
现在遵循这个想法完全认证的用户(已登录)不应该被允许访问该页面并且匿名认证应该能够访问,但是,不幸的是,没有一个用户能够访问它...
我缺少什么想法?
更新
通过正确答案,正如以下建议的那样工作:
- { path: ^/reset-password, allow_if: "is_anonymous() and !is_authenticated()" }
答案 0 :(得分:6)
您确定可以使用IS_*
测试has_role()
吗?这些角色扮演着角色,但他们不是角色。也许这就是为什么它总是返回false
:
您似乎最好在is_anonymous()
表达式中使用is_authenticated()
和allow_if
自定义函数。