2017-04-12 4 views
0

부여되어 있는지 확인 할 수 없습니다, 그래서 나는 로그인 성공이 기능을 서비스 LoginSuccessHanlder를 만들었습니다 : 그래서는 역할이 나는 그가 로그인 할 때 사용자에게 동적 역할을 설정했습니다

public function onAuthenticationSuccess(Request $request, TokenInterface $token) { 
    $response = null; 

    $user = $this->token->getToken()->getUser(); 
    $poste = $request->get('_poste'); 
    $user->addRole('ROLE_'.strtoupper($poste)); 
    $this->em->persist($user); 
    $this->em->flush(); 
    if ($this->authorizationChecker->isGranted('ROLE_USER')) { 
     $response = new RedirectResponse($this->router->generate('homepage')); 
     $response->headers->setCookie(new Cookie('poste', $poste)); 
    } 

    return $response; 
} 

여기, 로그인 양식의 필드 덕분에 사용자에게 새로운 역할을 추가했습니다 _poste . I가 로그인하고있어 일단 내가 할 수 있어야 :

{% if is_granted("ROLE_FLEX") %} 
    message 
{% endif %} 

을하지만 아무도 메시지

가 없다하지만이 할 경우 :

{{ dump(app.user.roles) }} 

을 나는 배열 역할에이 ROLE_FLEX , 왜 내가 is_granted 기능과 역할을 확인할 수없는 이유는 무엇입니까? 나는 무엇을 놓쳤는가? 내용은 내가 FOSUserBundle

을 사용하고

나는 사용자 로그 아웃 그래서 그는 로그 아웃 사용자가 더 이상 ROLE_FLEX이없는 경우지만 역할 것이라는 역할 매번 제거

편집 그가에서 로그에이 역할을 선택하면 추가 할 기본적으로 사용자가 각 세션

+0

'addRole' 함수 코드를 보여줄 수 있습니까? –

+0

@ i.am.michiel 'addRole' 기능은 FOSUserBundle에 의해 제공됩니다 –

+0

역할이 지속됩니까? 모든 요청에 ​​대해 FOSUserBundle은 사용자 및 역할을 데이터베이스 (또는 공급자가 무엇이든간에)에서 다시로드합니다. –

답변

1

사용할 수 있습니다. 즉, 토큰도 적절히 업데이트해야합니다.

+0

고마워요,이게 내 문제를 해결합니다! 나는 [this] (http : // stackoverflow./ question/19713802/symfony-2-3-how-do-i-refresh-the-authenticated-user-from-the-database) 토큰을 새로 고침하는 질문 –

0

나는 사용자가 특정 역할이 있는지 확인하기 위해 내 자신의 함수를 작성하는 것이었다 발견 된 솔루션의 역할이 있습니다.

public function isGranted($role) 
{ 
    return in_array($role, $this->getRoles()); 
} 

지금 나는 당신이 is_granted() 기능에 역할을 통과 할 때 심포니 보안 계층에 의해 사용되는 RoleVoter 클래스는 토큰이 아닌 사용자 개체의 역할을 읽고 {% if app.user.isGranted("ROLE_FLEX") %}

+1

이렇게 할 때 보안 시스템을 우회하고 있음을 메모하십시오. 유권자와 같은 것을 사용하기로 결심했다면, 그렇지 않으면 무엇이 문제가 될 것입니다. – Cerad

+0

@Cerad 사용자가 로그 아웃 할 때 역할을 제거한 이후로 다른 해결책을 찾지 못했습니다 –

관련 문제