В Symfony2 как я могу получить полный список ролей пользователей
Я хотел бы передать аутентифицированные пользователи список ролей для моих интерфейсных приложений, так что я могу использовать ту же структуру управления доступом в передней и задней части.
Я искал в классах security / authentication, поскольку именно там функция isGranted предназначена для меня, чтобы сделать это
$this->container->get('security.context')->isGranted('ROLE_SUPER_ADMIN')
Я не могу найти ничего, чтобы получить список ролей, хотя, это не поддерживается функция?
Nb: мне не нужна вся иерархия ролей, только список ролей для аутентифицированных пользователей. пользователь
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