В Symfony2 как я могу получить полный список ролей пользователей



Я хотел бы передать аутентифицированные пользователи список ролей для моих интерфейсных приложений, так что я могу использовать ту же структуру управления доступом в передней и задней части.



Я искал в классах security / authentication, поскольку именно там функция isGranted предназначена для меня, чтобы сделать это



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


Я не могу найти ничего, чтобы получить список ролей, хотя, это не поддерживается функция?



Nb: мне не нужна вся иерархия ролей, только список ролей для аутентифицированных пользователей. пользователь

535   2  

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

В итоге я добавил новую функцию репозитория и сервисный метод для получения этой информации.

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"]
}

Comments

    Ничего не найдено.