Symfony 2 - проблема с брандмауэром и контролем доступа - PullRequest
4 голосов
/ 10 марта 2012

У меня проблема с компонентом безопасности 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 ]

10 голосов
/ 13 июня 2012

Стоит отметить, что в данном случае рекомендуется использовать только один межсетевой экран с access_control для страницы входа. Зачем? Что бы вы сделали, если зарегистрированный пользователь пытается получить доступ к странице / login? Вы не сможете проверить в контроллере, аутентифицирован ли он, и перенаправить его, потому что пользователь будет аутентифицирован на вашем основном брандмауэре, но не на брандмауэре входа в систему, поскольку они являются отдельными системами безопасности.

Вот файл 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 }
4 голосов
/ 07 мая 2012

ИСПОЛЬЗУЙТЕ anynymous директиву в account_area:

account_area:
        pattern:    ^/
        anonymous: ~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...