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
在这种情况下,每个人都可以进入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()"
【问题讨论】:
【参考方案1】:您确定可以使用has_role()
测试IS_*
吗?这些行为类似于角色,但它们不是角色。也许这就是为什么它总是返回false
:
看来您最好在allow_if
表达式中使用is_anonymous()
和is_authenticated()
自定义函数。
【讨论】:
完美它让它工作得很好!- path: ^/reset-password, allow_if: "is_anonymous() and !is_authenticated()"
以上是关于Symfony2 - 将安全访问控制设置为只允许匿名身份验证的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2 - 添加控制器安全性以限制用户对特定博客的访问