Symfony2在Twig中获取用户角色

时间:2014-06-24 10:10:49

标签: symfony twig user-roles

我有一个问题,

如何在Symfony2 Twig中获得用户角色。

我曾四处寻找,但我找不到它。

请帮忙,或提示......

先谢谢。

叶诚万

5 个答案:

答案 0 :(得分:21)

一个更简单的选项可能是测试角色,因为你必须在security.yml中定义它们:

{% if is_granted('ROLE_ADMIN') %}
    Administrator
{% elseif is_granted('ROLE_USER') %}
    User
{% else %}
    Anonymous
{% endif %}

答案 1 :(得分:8)

您可以编写一个Twig扩展来完成此任务。

创建一个树枝扩展并将其注册为服务。

  1. services.yml添加

    services:
      cms.twig.cms_extension:
        class: Path\To\RolesTwigExtension.php
        tags:
          - { name: twig.extension }
        arguments: ["@service_container"]
    
  2. 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. 在您的twig文件中:

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

答案 2 :(得分:3)

捷希凯:

{{ 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 %}

答案 3 :(得分:1)

您可以使用app.security.token访问整个安全令牌。此外,roles是令牌的属性。

{{ dump(app.security.token.roles) }}

答案 4 :(得分:0)

您可以扫描用户的收藏角色:

&#13;
&#13;
{% for role in app.user.roles %}
{{ role }} <br> 
{% endfor %}
&#13;
&#13;
&#13;