Symfony2 - 将安全访问控制设置为只允许匿名身份验证

Posted

技术标签:

【中文标题】Symfony2 - 将安全访问控制设置为只允许匿名身份验证【英文标题】:Symfony2 - set security access_control to allow only authenticated anonymously 【发布时间】:2017-02-19 18:35:55 【问题描述】:

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

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

在这种情况下,每个人都可以进入homepagereset-password 页面。但我想只允许匿名身份验证的用户使用这些页面。完全通过身份验证的用户应获得403 access denied error404 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()" 

【问题讨论】:

【参考方案1】:

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

http://symfony.com/doc/current/security.html#checking-to-see-if-a-user-is-logged-in-is-authenticated-fully

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

http://symfony.com/doc/current/expressions.html#security-expression-variables

【讨论】:

完美它让它工作得很好! - path: ^/reset-password, allow_if: "is_anonymous() and !is_authenticated()"

以上是关于Symfony2 - 将安全访问控制设置为只允许匿名身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2:允许使用谷歌图表访问控制允许来源

Symfony2 - 添加控制器安全性以限制用户对特定博客的访问

我想将我的日期选择器设置为只允许选择偶数小时

将所有域添加到 CORS 的安全隐患(访问控制允许来源:*)

Linux之SSH安全设置

随便记录点阿里云服务器安全提醒