Как сопоставить URL с контролем безопасности Symfony

Привет всем, я новичок в 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

так далее..

3

Решение

Теперь нет простых способов Symfony получить эту информацию с помощью одной функции.

Чтобы получить его, вы можете получить доступ security.access_control параметры в вашем приложении, используя security.access_map оказание услуг.

Но вы не можете запросить его непосредственно из контейнера, потому что это частный сервис, поэтому вам нужно внедрить его в другой сервис.

И только тогда вы сможете написать свой собственный Twig расширение с isUrlGranted() функция.

П.С .: Мой ответ — только краткое изложение хорошо написанного ответ по аналогичному вопросу.

1

Другие решения

если вы используете ветку в своем представлении (которое должно содержать меню), вы можете проверить роль пользователя с помощью:

    {# my menu.twig.html #}

{% if app.security.isGranted('ROLE_ADMIN', app.user) %}
....
{% endif %}

Кстати, вы можете сделать то же самое в вашем контроллере, но я предположил, что ваш макет содержит меню, поэтому я отправил ответ веточку. Скажите, если это актуально и полезно для вас.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector