У меня есть проводная проблема с компонентом безопасности 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 }
Заранее спасибо!
Используйте любую директиву в 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 }