Symfony2 Получить роль пользователя в Twig

У меня есть один вопрос,

Как я могу получить роль пользователя в Symfony2 Twig.

Я искал вокруг, но я не мог найти его.

Помогите пожалуйста или подскажите..

Спасибо раньше.

Хендраван


person hendra1    schedule 24.06.2014    source источник
comment
Используете ли вы какой-либо пакет, например FOSUserBundle?   -  person Mohebifar    schedule 24.06.2014
comment
нет, я использую базовую безопасность Symfony   -  person hendra1    schedule 24.06.2014
comment
Вы можете найти ответ здесь. stackoverflow.com/ вопросы/7463650/   -  person obomaye    schedule 20.11.2014
comment
Вы хотите получить список ролей для 1 пользователя? Если вы просто хотите проверить роль, см. Ответ @IvanGabriele. Вы пользуетесь группами?   -  person paaacman    schedule 26.05.2015


Ответы (4)


Более простым вариантом может быть проверка роли, поскольку вы должны определить ее в security.yml:

{% if is_granted('ROLE_ADMIN') %}
    Administrator
{% elseif is_granted('ROLE_USER') %}
    User
{% else %}
    Anonymous
{% endif %}
person Ivan Gabriele    schedule 26.05.2015

Для этого вы можете написать расширение Twig.

Создайте расширение ветки и зарегистрируйте его как службу.

  1. в services.yml добавить

    services:
      cms.twig.cms_extension:
        class: Path\To\RolesTwigExtension.php
        tags:
          - { name: twig.extension }
        arguments: ["@service_container"]
    
  2. In RolesTwigExtension.php

    use Symfony\Component\Security\Core\User\UserInterface;
    
    class RolesTwigExtension extends \Twig_Extension {
        public function getFilters() {
            return array(
                new \Twig_SimpleFilter('getRoles', [$this, 'getRoles']),
            );
        }
    
        public function getName() {
            return 'roles_filter_twig_extension';
        }
    
        public function getRoles(UserInterface $user) {
            return $user->getRoles();
        }
    }
    
  3. В вашем файле ветки:

    <ul>
        {% for key, value in app.user|getRoles %}
            <li>{{ value.name }}</li>
        {% endfor %}
    </ul>
    
person Praveesh    schedule 24.06.2014

Силекс:

{{ dump(app.user.roles) }}
array(1) { [0]=> string(9) "ROLE_USER" }


{% if app.user is not null %}
  {% for role in app.user.roles if role != 'ROLE_ADMIN' %}
      {{ role }} //ROLE_USER
  {% endfor %}
{% endif %}
person Fabiano Monteiro    schedule 14.07.2016

Вы можете получить доступ ко всему токену безопасности, используя app.security.token. Также roles является атрибутом токена.

{{ dump(app.security.token.roles) }}
person Mohebifar    schedule 24.06.2014
comment
когда я пытаюсь, почему возвращаемое значение выглядит так: массив (размер = 0) - person hendra1; 24.06.2014
comment
array(1) { [0]=> object(AppBundle\Entity\Role)#1067 (3) { [id:AppBundle\Entity\Role:private]=> int(3) [name:AppBundle\Entity\Role: private]=›string(5) admin [role:AppBundle\Entity\Role:private]=›string(10) ROLE_ADMIN } } Это мой вывод - person Sudhakar Krishnan; 25.05.2015
comment
app.user.roles теперь (3.x) ответ. - person RichieHH; 20.09.2017