Symfony2 - 将security access_control设置为仅允许匿名进行身份验证

时间:2016-10-11 08:46:29

标签: php symfony access-control symfony-security

假设我在access_control下面有security.yml块:

access_control:
    - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/reset-password, roles: IS_AUTHENTICATED_ANONYMOUSLY }

在这种情况下,每个人都可以输入homepagereset-password页面。但我想仅允许匿名身份验证的用户使用这些页面。完全通过身份验证的用户应获得403 access denied error404 page not found

根据documentationallow_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()" }

1 个答案:

答案 0 :(得分:6)

您确定可以使用IS_*测试has_role()吗?这些角色扮演着角色,但他们不是角色。也许这就是为什么它总是返回false

您似乎最好在is_anonymous()表达式中使用is_authenticated()allow_if自定义函数。