Как использовать избирателя в файле безопасности в Symfony 3 - PullRequest
0 голосов
/ 08 октября 2018

Я создал специального избирателя для проверки состояния, которое разрешает или не разрешает пользователям доступ к части моего веб-сайта.

Мне удалось проверить его таким образом в Контроллере, и он работает.

$this->denyAccessUnlessGranted(UserVoter::IF_USER_AGREED_CONDITIONS, $user);

В файле security.yml часть, которой разрешено управлять доступом к некоторым страницам, зависит от ролей использования.

access_control:
- { path: ^/test, roles: IS_AUTHENTICATED_FULLY }
- { path: ^/test2, roles: IF_USER_AGREED_CONDITIONS }

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

Дело в том, что я не хочу изменять все мои контроллеры для добавления этой строки, потому что файл security.yml вызывается по умолчанию.

1 Ответ

0 голосов
/ 08 октября 2018

URL-адреса access_control являются префиксами, поэтому в обычном случае они потребуются для /admin или /admin/some-other-page.Таким образом, проверка для / test запускается и проверяется, но не для / test2 - вы можете сначала проверить наиболее конкретные пути, и сначала указать / test2.

Для избирателя безопасности вам не нужноВ частности, отметьте, что в access_control - он указан в списке, и поэтому будет проведена проверка безопасности - в кодовом блоке, который у вас есть выше, проверка указана прямо здесь - «это роль IF_USER_AGREED_CONDITIONS?».Если его явно нет в списке, он обратится к списку поддерживаемых избирателей, где избиратели $subject будут экземпляром Request, точно так же, как вы легко получаете его в контроллере.Проверка «поддерживается ли это» - это а) это Request и б) $subject->getUri(); запускается / /test2'.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...