Symfony2 + Twig: использование шаблона как для аутентифицированного, так и для анонимного пользователя

Я новичок в symfony и twig, и у меня немного болит голова с безопасностью, брандмауэрами и шаблонами.

Я пытаюсь создать «базовый» шаблон с верхней панелью. Я бы хотел, чтобы на этой верхней панели отображалось сообщение «Вы не вошли в систему», если пользователь не вошел в систему, и сообщение «Добро пожаловать, пользователь U», если пользователь вошел в систему. Потому что я поставил

{% if is_granted('IS_AUTHENTICATED_FULLY') %}

в «базовом» шаблоне, чтобы различать зарегистрированных и анонимных пользователей, но у меня есть проблемы с токенами контекста безопасности.

Мои общедоступные пути (не защищенные брандмауэром):

/myapp/ 
/myapp/home 
/myapp/about 
/myapp/help

а позже есть несколько путей для действий, которые могут получить доступ только к аутентифицированным пользователям:

/myapp/action1
/myapp/action2
...
/myapp/actionN

Проблема в том, что как только пользователь вошел в мою «базу», отображается приветственное сообщение в виде actions1, ..., actionN, но когда пользователь переходит на «домашнюю» или «справочную» страницы, появляется сообщение «вы не вошли в систему. в".

У кого-то похожая ситуация? как ты это решил? как настроены ваш маршрутизатор и файлы безопасности?


person EricSonaron    schedule 25.09.2011    source источник


Ответы (1)


Брандмауэр не разделяет контекст безопасности. Поэтому, когда действие не находится за брандмауэром, вы не можете получить доступ к информации о пользователе. Попробуйте разместить все приложение за брандмауэром (и разрешить анонимным пользователям):

firewalls:
    secured_area:
        pattern: ^/
        anonymous: ~
        form_login:
            check_path: /login_check
            login_path: /login
        logout:
            path:   /logout
            target: /
access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/action, roles: ROLE_USER }

Убедитесь, что путь к логину доступен анонимным пользователям.

person Kristian Zondervan    schedule 27.09.2011