2016-10-11 58 views
4

比方说,我有下security.ymlaccess_control块:的Symfony2 - 设置安全ACCESS_CONTROL为只允许匿名认证

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

在这种情况下,每个人都alowed进入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')" } 

现在下面的想法完全验证的用户(登录)不应该被允许访问的页面和匿名认证应该能够访问,但是,可惜的是没有的,用户能够访问它...

任何想法我失踪?

UPDATE

这得到它的工作,通过正确答案波纹管提示:

- { path: ^/reset-password, allow_if: "is_anonymous() and !is_authenticated()" } 

回答

5

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

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

+0

完善它使人们的工作就好了! ' - {path:^/reset-password,allow_if:“is_anonymous()and!is_authenticated()”}' –

相关问题