Прежде всего, вам нужно получить аутентификацию пользователя:
$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();
Не уверен, что я понимаю ... существует метод $ token-> getUser() ', который должен предоставить ваш метод' addRole'? – hasumedic