2016-02-26 3 views
2

Возможно, вопрос очень прост, но вот он:Как получить пользовательский класс пользователя

Я аутентифицирован с использованием собственного класса User и класса UserProvider. Я добавил DefaultAuthenticationSuccessHandler, чтобы изменить подключенного пользователя.
Это должно произойти в этом методе:

public function onAuthenticationSuccess(Request $request, TokenInterface $token) 

В моем пользовательском классе User, у меня есть метод addRole.

Как я могу достичь этого метода из токена, указанного в качестве параметра в функции onAuthenticationSuccess?

+0

Не уверен, что я понимаю ... существует метод $ token-> getUser() ', который должен предоставить ваш метод' addRole'? – hasumedic

ответ

0

Прежде всего, вам нужно получить аутентификацию пользователя:

$user = $token->getUser(); 

Затем, вы должны быть в состоянии назвать $user->addRole().

Но вам нужно сохранить изменения в db.
Для этого вам необходимо ввести доктрину EntityManager к вашим услугам.

Изменить объявление службы:

# services.yml 
    your_authentication_success_handler: 
    # ... 
    arguments: 
     entityManager: "@doctrine.orm.entity_manager" 

указан в конструкторе службы entityManager:

// Authentication success handler 
public function __construct(\Doctrine\ORM\EntityManager $entityManager = null) 
{ 
    $this->_em = $entityManager; 
} 

Теперь вы можете обновить пользователя в методе onAuthenticationSuccess как следует:

public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
{ 
    $user = $token->getUser(); 
    $user->addRole('YOUR_ROLE'); 
    $this->_em->flush(); 
} 

Upda тэ

Поскольку User вернулся не экземпляр вашего пользовательского User сущности, вы должны получить его с помощью Repository вашего лица.

use YourBundle\Entity\User; 
// ... 

$user = $token->getUser(); 

if (!($tokenUser instanceof User) { 
    $repository = $this->_em->getRepository('YourBundle:User'); 
    $user = $repository->findBy(array(
     'username' => $tokenUser->getUsername(), // Assuming the 'username' property is unique 
    )); 
} 

$user->addRole('YOUR_ROLE'); // Now you can access the method 
$this->_em->flush(); 
+0

$ token-> getUser() не позволяет мне использовать addRole(). Я должен бросить право? – mlwacosmos

+0

Посмотрите на мое редактирование – chalasr

+0

Я не понимаю ... – mlwacosmos

Смежные вопросы