Symfony 2 - 防火墙和访问控制问题

时间:2012-03-10 19:35:02

标签: php security symfony

我遇到了symfony 2安全组件的有线问题。由于{{ app.user }}对象仅在安全区域内可用,因此我将防火墙模式设置为^/。现在我想要“无担保”一些页面,比如注册。我已经尝试使用access_control,但它不起作用。

这是我的security.yml

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    login:
        pattern:  ^/account/login$
        security: false

    account_area:
        pattern:    ^/
        form_login:
            check_path: /account/login_check
            login_path: /account/login
            default_target_path: /account
        remember_me:
            key:      blaBlubKey
            lifetime: 3600
            path:     /
            domain:   ~
        logout:
            path:   /account/logout
            target: /

access_control:
    #works
    - { path: ^/backend, roles: ROLE_USER }
    #works not
    - { path: ^/registration, roles: IS_AUTHENTICATED_ANONYMOUSLY }

提前致谢!

2 个答案:

答案 0 :(得分:10)

值得一提的是,这里的最佳做法是只使用一个带access_control的防火墙用于登录页面。为什么?如果登录用户尝试访问/登录页面,您会怎么做?如果他经过身份验证并重定向他,您将无法检入控制器,因为用户将通过主防火墙验证,但不会登录到登录防火墙,因为它们是单独的安全系统。

这是对我很有用的security.yml:

security:
    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: true
            anonymous: ~ 
        secured_area:
            pattern:    ^/
            anonymous:  ~
            form_login:
                login_path:  /login
                check_path:  /login_check
                always_use_default_target_path: true
                default_target_path: /
            logout:
                path:   /logout
                target: /
    providers:
        main:
            entity: { class: Core\UserBundle\Entity\User, property: username }
    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_SUPERADMIN }
        - { path: ^/user, roles: ROLE_USER }
        - { path: ^/, roles: IS_AUTHENTICATED_FULLY }

答案 1 :(得分:4)

在account_area中使用anynymous指令:

account_area:
        pattern:    ^/
        anonymous: ~