Symfony2 在 Twig 中获取用户角色
Posted
技术标签:
【中文标题】Symfony2 在 Twig 中获取用户角色【英文标题】:Symfony2 Get User Role in Twig 【发布时间】:2014-08-14 13:19:45 【问题描述】:我有一个问题,
如何在 Symfony2 Twig 中获取用户角色。
我四处张望,但找不到。
请帮忙,或者线索..
之前谢谢。
亨拉万
【问题讨论】:
你使用像 FOSUserBundle 这样的捆绑软件吗? 不,我使用 symfony 基本安全 您可以在此处找到回复。 ***.com/questions/7463650/… 您想获取 1 个用户的角色列表吗?如果您只想测试一个角色,请参阅@IvanGabriele 答案。你使用群组吗? 【参考方案1】:一个更简单的选择可能是测试角色,因为您必须在 security.yml 中定义它们:
% if is_granted('ROLE_ADMIN') %
Administrator
% elseif is_granted('ROLE_USER') %
User
% else %
Anonymous
% endif %
【讨论】:
【参考方案2】:您可以编写一个 Twig 扩展来完成此操作。
创建一个 twig 扩展并将其注册为服务。
在services.yml
添加
services:
cms.twig.cms_extension:
class: Path\To\RolesTwigExtension.php
tags:
- name: twig.extension
arguments: ["@service_container"]
在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();
在你的树枝文件中:
<ul>
% for key, value in app.user|getRoles %
<li> value.name </li>
% endfor %
</ul>
【讨论】:
【参考方案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 %
【讨论】:
【参考方案4】:您可以使用app.security.token
访问整个安全令牌。 roles
也是token的一个属性。
dump(app.security.token.roles)
【讨论】:
当我尝试它时为什么返回值是这样的:array (size=0) array(1) [0]=> object(AppBundle\Entity\Role)#1067 (3) ["id":"AppBundle\Entity\Role":private]=> int (3) ["name":"AppBundle\Entity\Role":private]=> 字符串(5) "admin" ["role":"AppBundle\Entity\Role":private]=> 字符串(10) "ROLE_ADMIN " 这是我的输出 app.user.roles 现在 (3.x) 是答案。【参考方案5】:您可以扫描用户的收藏角色:
% for role in app.user.roles %
role <br>
% endfor %
【讨论】:
以上是关于Symfony2 在 Twig 中获取用户角色的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2:在 FormBuilder 中获取用户角色列表
从 Symfony2/Twig 中的 2 位国家代码获取翻译的国家名称?
在带有 Symfony2 的 Twig 中使用 % stylesheets % 标签时通过 Twig 运行 CSS 文件