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

Fri*_*ido 4 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 }
Run Code Online (Sandbox Code Playgroud)

提前致谢!

tho*_*kor 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 }
Run Code Online (Sandbox Code Playgroud)