Symfony2初学者安全上下文问题

时间:2013-10-31 11:11:00

标签: php security symfony

直到最近,我还有一个向公众开放的区域(/和/或其他)以及需要ROLE_USER(/ portal和/ portal /等)的安全区域。现在我想在我的安全区域内创建一个需要ROLE_ADMIN的管理区域。 (/ portal / admin和/ portal / admin / whatever)。

我有security.yml看起来如下:

    firewalls:
    login_firewall:
      pattern:    ^/portal/login$
      anonymous:  ~
    secured_area:
        pattern:    ^/portal
        form_login:
            login_path:  portal_login
            check_path:  login_check
            default_target_path: portal_dashboard  
        logout:
            path:   portal_logout
            target: portal_dashboard
        http_basic:
            realm: "MyFreelancer Client Portal"

    access_control:
    - { path: ^/portal/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/portal/, roles: ROLE_USER }
    - { path: ^/portal/admin, roles: ROLE_ADMIN }

我刚刚添加了第三行。我的问题是具有ROLE_USER的用户仍然可以访问^ / portal / admin。有人可以向我解释为什么这不起作用?

另一种方法是将管理区域置于/ admin和/ admin / whatever下,但这需要完全不同的防火墙上下文,我不太清楚如何做到这一点。我试过了,但它一直把我带回/ portal /当我浏览到/ admin /它要求再次登录然后再带我回到/ portal /(无限循环)。

如果作为辅助答案,您可以向我解释用户区和管理区与单独防火墙上下文的单一防火墙上下文的专业版和内容,以及如何实施(如有必要)?

提前谢谢。

更新:我发现简单地切换两个底线可以解决问题,因为它会顺时针运行它们,因此/ portal / admin /得到了第二行,这只需要ROLE_USER 。如果有人仍然可以给我一些见解,是否更好地在单独的防火墙环境中运行管理区域,为什么,如果是,如何?

1 个答案:

答案 0 :(得分:0)

设置access_control时,请确保您的路线的顺序与路线与上述路线不匹配。例如,将^ / admin / login /置于^ / admin /之上,否则将触发第一场比赛(将是^ / admin /)。

相关问题