2015-02-15 5 views
1

У меня такой сценарий. Мой сайт имеет защищенную часть. Безопасность, я думаю, правильно настроена. Если я попытаюсь открыть защищенный URL-адрес из браузера, меня попросят ввести имя пользователя и пароль. Symfony профайлера правильно показывает контекст пользователя после входа в системе домашней страницей (корневой маршрут) не защищен (профайлер показывает здесь анонимный контекст)Symfony security and twig Render funcion

Теперь проблема: Если в шаблоне веточки домашней страницы, я ставлю что-то например

{{ render(path('secured_route')) }} 

содержание защищенного маршрута предоставлено! Я ожидал получить какое-то исключение или окно входа в систему! Является ли это ошибкой или я что-то упускаю?

ответ

0

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

Лучшее, что вы можете сделать, это сдержанностью контроллер авторизированным пользователям, использующим @Security аннотацию:

/** 
* @Security("has_role('IS_AUTHENTICATED_REMEMBERED')") 
*/ 
+0

Итак, каждый контроллер проверяет разрешения. Управление безопасностью на уровне маршрута кажется бессмысленным. –

+0

Каждый контроллер и все методы обслуживания также, если для этого требуются проверки безопасности. –

0

с помощью «визуализации» от прут вы пропускаете проверки безопасности, связанные с маршрутами, если вы вам не нужно получать контент в анонимном контексте, вы можете проверить роль от Twig до предоставления контроллера, например:

{% if is_granted('ROLE_USER') %} 
    {{ render(path('secured_route')) }} 
{% endif %} 
+0

Мне не нравится иметь прикладную логику в представлении ... –

+0

Тогда не используйте {{render (path ('protected_route'))}} в представлении и обрабатывайте безопасность с контроллера – Strnm