【问题标题】:In Symfony2 how can I get a users full list of roles在 Symfony2 中,我如何获得用户角色的完整列表
【发布时间】:2017-01-21 13:17:41
【问题描述】:

我想将经过身份验证的用户角色列表传递给我的前端应用程序,这样我就可以在前端和后端使用相同的访问控制结构。

我正在查看安全/身份验证类,因为这是我可以使用 isGranted 函数执行此操作的地方

$this->container->get('security.context')->isGranted('ROLE_SUPER_ADMIN')

我找不到任何东西来获取角色列表,这不是受支持的功能吗?

nb:我不想要整个角色层次结构,只想要经过身份验证的用户的角色列表

【问题讨论】:

  • 我只想要经过身份验证的用户角色,而不是整个 heirachy
  • 好的,这个问题可能对你有帮助:stackoverflow.com/questions/11246774/…(不是第一个答案)
  • 谢谢,这不是我想要的。我整理了一个简单的存储库函数来获取我需要的信息。我会添加一个答案,以防其他人遇到此问题
  • 对不起,它没有检查第二个链接,答案没有显示如何获取用户的所有角色。

标签: symfony security-context


【解决方案1】:

我最终添加了一个新的存储库函数和一个服务方法来获取此信息。

MyProject/UserBundle/Entity/Repository/UserRepository

public function getRoles($userId)
{
    $queryBuilder = $this->createQueryBuilder('u');
    $queryBuilder
        ->select('u.id, u.roles AS user_roles, g.roles AS group_roles')
        ->leftJoin('u.groups', 'g')
        ->andWhere('u.id = :user_id')
        ->setParameter('user_id', $userId);

    return $queryBuilder->getQuery()->getArrayResult();
}

MyProject/UserBundle/Service/UserService

public function getUserRoles($user)
{
    $groupRoles = $this->repository->getRoles($user->getId());

    $roles = array('user_roles' => array(), 'group_roles' => array());
    foreach ($groupRoles as $groupRole) {
        $roles['user_roles'] = array_merge($roles['user_roles'], $groupRole['user_roles']);
        $roles['group_roles'] = array_merge($roles['group_roles'], $groupRole['group_roles']);
    }

    return $roles;
}

这给了我一个这样的数组

"roles":{
    "user_roles":[],
    "group_roles":["ROLE_ADMIN","ROLE_ONE","ROLE_TWO","ROLE_BEST"]
}

【讨论】:

    【解决方案2】:

    假设你正在使用 Symfony 安全组件,你的用户类实现的用户界面已经包含了这个:

    $user = $this->get('security.token_storage')->getToken()->getUser();
    var_dump($user->getRoles());
    

    http://api.symfony.com/3.1/Symfony/Component/Security/Core/User/UserInterface.html#method_getRoles

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 2013-01-16
      • 2014-08-14
      • 2018-11-18
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多