Hola a tod@s!,
Agradecería vuestra ayuda con este tema.
Tengo un rest público que actualiza una entidad, la cual uno de los campos de se trata de un updatedBy (tipo blameable).
A este rest se le pasa el usuario por parámetro ($paramFetcher->get("user")) y a través de una clase UserBundle se recoge el objeto del usuario y se logea (en teoría :S) mediante security.interactive_login.
El problema es que a la hora de hacer persist/flush sobre la entidad, la funcionalidad de blameable no funciona.
Os pego el código:
///////////////////////////////////
$user = $manager->getRepository ( 'GesconBaseUserBundle:User' )->findOneBy(
array('username' => $paramFetcher->get("user"))
);
if (!$user) {
throw new UsernameNotFoundException("User not found");
} else {
$token = new UsernamePasswordToken($paramFetcher->get("user"), $user->getTempPassword(), "main", $user->getRoles());
$this->get("security.context")->setToken($token); //now the user is logged in
// login event
$request = $this->get("request");
$event = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
}
$entidad->setPrueba('prueba');
$manager->persist($entidad);
$manager->flush();
///////////////////////////////////
También he probado a establecerlo manualmente antes de hacer persist/flush:
$entidad->setUpdatedBy($user->getName());
Pero lógicamente la funcionalidad blameable imagino que se ejecuta mediante un listener cuando se hace el persist, y lo machaca después en blanco.
Entiendo que es un problema del login interactivo, ya que cuando se modifica esta entidad desde dentro de un controller mediante el cauce normal de la aplicación el blameable funciona correctamente.
Muchas gracias por vuestra ayuda!!
Un saludo.