Symfony 2 - 在twig模板中访问分层角色

9

在我的模板中,我需要知道用户是否具有某些角色,以便根据角色来显示内容。到目前为止,我已经在我的用户类中实现了一个小函数:

  public function hasRole($role) {
    $roles = array();
    foreach ($this->getRoles() as $rol) {
      $roles[] = $rol->getRole();
    }
    return in_array($role, $roles);
  }

这个功能可以告诉我一个用户是否拥有作为参数传递的字符串指定的角色。它可以在twig模板中调用,但无法了解角色层次结构。有没有一种方法可以从控制器中访问角色层次结构?或者直接从twig模板中访问?我查看了官方文档,但没有找到相关内容。


请查看这个答案。 - Mun Mun Das
1个回答

21

您可以使用以下代码在Twig模板中检查角色,它解释了如果当前用户具有以下角色,则显示某些内容。

{% if is_granted('ROLE_ADMIN') %}

  //show things related to admin role

{%else if is_granted('ROLE_USER')%}
//show things related to user role
{% endif %}

希望这可以对你有所帮助。 愉快地编码!


谢谢您的回答!有一个问题:如果我的用户拥有ROLE_SUPERADMIN,这个角色在层次上高于ROLE_ADMIN,那么{% if is_granted('ROLE_ADMIN') %}是否会被评估为“true”? - Throoze
1
Throoze@:如果一个用户使用ROLE_SUPERADMIN登录,则他在层次上高于ROLE_ADMIN(希望您在security.yml中指定了层次顺序),那么它将评估为True,因为在层次上他是一个具有ROLE_SUPERADMIN和ROLE_ADMIN的用户。 - Asish AP
不好意思打扰您了...在控制器中,与is_granted()相当的是什么? - Throoze
4
在控制器中,您可以像以下代码一样按角色检查用户:如果(TRUE === $this->get('security.context')->isGranted('ROLE_SUPERADMIN')){//超级管理员}否则,如果(TRUE === $this->get('security.context')->isGranted('ROLE_ADMIN')){//管理员} - Asish AP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接