Symfony 2 - проблема межсетевого экрана и контроля доступа

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

Используйте любую директиву в account_area:

account_area:
 pattern: ^/
 anonymous: ~


Следует отметить, что лучше всего использовать только один брандмауэр с 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 }

licensed under cc by-sa 3.0 with attribution.