Привет всем, я новичок в Symfony и имею простую проблему.
в security.yml
В файле я установил несколько путей с контролем доступа:
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: .*settings, roles: ROLE_USER }
- { path: ^/$, roles: ROLE_USER }
- { path: ^/.*, roles: ROLE_ADMIN }
Это пока работает так, как я хочу.
Сейчас я создаю меню и хочу скрыть показ элементов навигации на основе его доступа, так как я могу получить эту информацию?
Должна быть какая-то функция вроде:
$securityContext->isUrlGranted( $this->generateUrl('homepage') );
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ
Пример:
// current user is ROLE_ADMIN:
$acl->isUrlGranted( 'foo/bar' ); // true
$acl->isUrlGranted( 'login' ); // true
// IS_AUTHENTICATED_ANONYMOUSLY
$acl->isUrlGranted( 'login' ); // true
$acl->isUrlGranted( 'something/else' ); // false
// ROLE_USER
$acl->isUrlGranted( 'settings/profile' ); // true
$acl->isUrlGranted( 'foo/bar' ); // false
так далее..
Теперь нет простых способов Symfony
получить эту информацию с помощью одной функции.
Чтобы получить его, вы можете получить доступ security.access_control
параметры в вашем приложении, используя security.access_map
оказание услуг.
Но вы не можете запросить его непосредственно из контейнера, потому что это частный сервис, поэтому вам нужно внедрить его в другой сервис.
И только тогда вы сможете написать свой собственный Twig
расширение с isUrlGranted()
функция.
П.С .: Мой ответ — только краткое изложение хорошо написанного ответ по аналогичному вопросу.
если вы используете ветку в своем представлении (которое должно содержать меню), вы можете проверить роль пользователя с помощью:
{# my menu.twig.html #}
{% if app.security.isGranted('ROLE_ADMIN', app.user) %}
....
{% endif %}
Кстати, вы можете сделать то же самое в вашем контроллере, но я предположил, что ваш макет содержит меню, поэтому я отправил ответ веточку. Скажите, если это актуально и полезно для вас.