php – Symfony2 – 将security access_control设置为仅允许匿名进行身份验证
作者:互联网
假设我在security.yml下有access_control块:
access_control:
- { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/reset-password, roles: IS_AUTHENTICATED_ANONYMOUSLY }
在这种情况下,每个人都可以进入主页和重置密码页面.但我想仅允许匿名身份验证的用户使用这些页面.完全通过身份验证的用户应该收到403访问被拒绝错误或找不到404页面.
根据documentation with allow_if我应该是ablo来创建角色表达式来定义访问.但如果我这样做:
access_control:
- { path: ^/reset-password, allow_if: "has_role('IS_AUTHENTICATED_ANONYMOUSLY') and not has_role('IS_AUTHENTICATED_FULLY')" }
现在遵循这个想法,不应该允许完全认证的用户(登录)访问该页面并且匿名认证应该能够访问,但是,不幸的是,没有一个用户能够访问它…
我缺少什么想法?
UPDATE
通过正确的答案,正如以下建议的那样:
- { path: ^/reset-password, allow_if: "is_anonymous() and !is_authenticated()" }
最佳答案:
您确定可以使用has_role()测试IS_ *吗?这些角色扮演角色,但他们不是角色.也许这就是它总是返回false的原因:
看来你最好在allow_if表达式中使用is_anonymous()和is_authenticated()自定义函数.
> http://symfony.com/doc/current/expressions.html#security-expression-variables
标签:php,symfony,access-control,symfony-security 来源: https://codeday.me/bug/20190516/1114841.html