#symfony
#symfony
Вопрос:
Я использую Symfony 4.
У меня есть ^/admin
только для роли ROLE_ADMIN
. Однако мне нужно, чтобы некоторые страницы были доступны для других ролей. Например, я хочу /admin
, чтобы and /admin/article
был доступен для роли ROLE_ASSISTANT
. Я начал с добавления @IsGranted("ROLE_ASSISTANT")
в /admin/article
метод контроллера. Но это не помогло. Я не могу найти никаких ресурсов о том, как перезаписать управление доступом security.yaml
, но мне нужно. Мне не нужно открывать весь раздел администратора для помощника, всего пару страниц в admin.
Ответ №1:
Вам не нужно перезаписывать его с контроллера. Просто измените порядок access_control в вашей безопасности.файл yaml. Что-то вроде:
access_control:
- { path: ^/admin/article, roles: ROLE_ASSISTANT }
- { path: ^/admin, roles: ROLE_ADMIN }
Комментарии:
1. Вопрос в том, как перезаписать
access_controle
с@IsGranted
помощью . Я не хочуservices.yaml
переполняться множеством правил, трудных для понимания. Мой пример довольно упрощен, а реальный случай сложнее.2. @FreeLightman брандмауэр уже заблокировал ваш запрос, прежде чем он дойдет до вас
isGranted
, еслиaccess_control
он уже запрещает доступ. Так что это решение — ИМХО — наиболее подходящее. Альтернативой является разрешениеaccess_control
обеих ролей и фильтрация во всех соответствующих контроллерах / маршрутах, что, вероятно, более подвержено ошибкам.3. Значит, это обычная практика использовать
access_control
и не использовать@IsGranted
? Я думал, что их можно объединить.4. у @Jakumi есть причина. Можно использовать isGranted внутри вашего контроллера, но не совсем чистый. Контроллеру нужно просто получить запрос и отправить ответ. С другой стороны, компонент безопасности должен обрабатывать все, что касается безопасности, это называется «разделение проблем»
5. Документы объясняют access_control: symfony.com/doc/current/security/access_control.html Вы можете использовать isGranted для дальнейшего ограничения того, что пропускает access_control, но вы не можете его расширить. Если у вас более сложные правила и особые случаи, то, возможно, вам подойдет собственный слушатель запросов и, возможно, некоторые избиратели.