2016-09-13 2 views
2

인증 된 사용자 목록을 프런트 엔드 앱에 전달하여 프런트 엔드와 백 엔드에서 동일한 액세스 제어 구조를 사용할 수 있습니다.Symfony2에서 사용자에게 전체 역할 목록을 얻는 방법은 무엇입니까?

는 제가 비록 역할의 목록을 아무것도 찾을 수없는이

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

을 수행하기위한 isGranted 기능이있는 곳 즉 나는 보안/인증 클래스에서 찾고 있었다

이 아니다 지원되는 기능?

주의 : I 전체 역할 계층, 나는 새 저장소 기능과이 정보를 얻을 수있는 서비스 방법을 추가 결국 인증 된 사용자

+0

가능한 복제 [심포니 전체 역할 계층 구조를 검색하는 방법 (http://stackoverflow.com/questions/8928085/how-to-retrieve-full-role -hierarchy-in-symfony) –

+1

나는 단지 신이 난 사람들이 아닌 인증 된 사용자의 역할을 원합니다. – mike

+0

좋습니다. 다른 질문이 도움이 될 수 있습니다 : http://stackoverflow.com/questions/11246774/symfony2-getting-the-list- form-user-roles-in-formbuilder (첫 번째 대답이 아님) –

답변

2

의 역할 단지 목록을 원하지 않는다.

에 MyProject/UserBundle/법인/저장소/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/서비스/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"] 
} 
관련 문제