Выбор ответа Senior Symfony кратко обновлено

Авторизация через voters

Вопрос

Как в Symfony проверить, что пользователь может редактировать конкретный пост?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Написать Voter для POSTEDIT и вызвать denyAccessUnlessGranted. Роли и accesscontrol в security.yaml отвечают на вопрос «кто это», а не «можно ли с этим объектом».

Варианты ответа

  1. Проверить роль ROLE_USER в access_control файла security.yaml
  2. Написать Voter для POST_EDIT и вызвать denyAccessUnlessGrantedправильный ответ
  3. Сравнить id автора в шаблоне Twig и спрятать кнопку редактирования
  4. Настроить отдельный firewall для каждого поста в security.yaml

Разбор

Роли и access_control в security.yaml отвечают на вопрос «кто это», а не «можно ли с этим объектом». Voter получает атрибут и объект и решает, например, что автор или модератор может редактировать. Скрытая кнопка в шаблоне не защищает: запрос можно отправить напрямую. Firewall описывает аутентификацию для областей приложения.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.