<a href="{{ path('usuario_logout') }}">Cerrar sesión</a>
para cerrar sesión debes poner:
<a href="{{ path('fos_user_security_logout') }}">Cerrar sesión</a>
Ahora para obtener los datos de un usuario logueado desde el template sería:
{{ app.user }} {# obtiene el username #}
Para otros campos del objeto usuario sería:
{{ app.user.email }}
etc
Acá te envío un resumen de cómo he utilizado yo el bundle
FosUserBundle, mira bien el adjunto
Ahora:
Para Eliminar un usuario:
1- Se busca el objeto del usuario que queremos borrar
2- Se procede a eliminarlo
En caso de que queramos borrarnos nosotros mismos:
$userSession = $this->get('security.context')->getToken()->getUser();
$this->get('fos_user.user_manager')->deleteUser($userSession);
//----------------------------------------------------------------------------
En casi de que queramos borrar a otro usuario:
$fosUser = $this->get('fos_user.user_manager')->findUserBy(array('id' => 5));
$this->get('fos_user.user_manager')->deleteUser($fosUser);
//----------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Activar o Desactivar Usuarios:
En este caso lo vamos a desactivar:
$fosUser = $this->get('fos_user.user_manager')->findUserBy(array('id' => 5));
$fosUser->setEnabled(false);
$this->get('fos_user.user_manager')->updateUser($fosUser, true);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
para en caso de un controlador que necesite los datos de la sesion del
usuario logueado pero la misma haya expirado
Un ejemplo: En Hatteras para entrar a ver los grupos primeramente el
sistema toma el objeto fosuser de la sesión y filtra los grupos que
pertenezca al usuario que esté autenticado en ese instante, a veces
sucede que la sesión expira y cuando se trata de entrar a dicha página
nos muestra un mensaje de error en vez de redireccionarnos a la página
de autenticación, la forma d evalidar esto es en el controlador de la
siguiente manera:
$fosUser = $this->get('security.context')->getToken()->getUser();
//obtenemos el objeto fosuser autenticado
if ($fosUser != 'anon.') { //aquí en caso de haber expirado la sesión
devuelve anon.
$user = $em->getRepository('DataCimexHactivatorBundle:FosUser')->find($fosUser->getId());
} else {
return $this->redirect($this->generateUrl('homepage'));
}
Todo el controlador quedó así:
public function indexAction($page) {
$em = $this->get('doctrine')->getEntityManager();
$request = $this->getRequest();
$sesion = $request->getSession();
$fosUser = $this->get('security.context')->getToken()->getUser();
if ($fosUser != 'anon.') {
$user =
$em->getRepository('DataCimexHactivatorBundle:FosUser')->find($fosUser->getId());
} else {
return $this->redirect($this->generateUrl('homepage'));
}
$valueCantElementsPaginate = $sesion->get('valueCantElementsPaginate');
$entities =
$em->getRepository('DataCimexHactivatorBundle:HaGroup')->findAll();
$adapter = new ArrayAdapter($entities);
if ($valueCantElementsPaginate) {
$entities = new Pager($adapter, array('page' => $page,
'limit' => $valueCantElementsPaginate));
} else {
$valueCantElementsPaginate =
$em->getRepository('DataCimexHactivatorBundle:HaConfiguration')->findOneBy(array('name'
=> 'cant.show.paginate'));
$entities = new Pager($adapter, array('page' => $page,
'limit' => $valueCantElementsPaginate));
}
return $this->render('DataCimexHactivatorBundle:HaGroup:index.html.twig',
array(
'entities' => $entities,
'user' => $user
));
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Cambiar contraseña a usuario:
$this->get('fos_user.util.user_manipulator')->changePassword($username,
$password);
Ejemplo:
$this->get('fos_user.util.user_manipulator')->changePassword('caca', '1234');
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Así se crea un usuario, con tan solo una línea:
$this->get('fos_user.util.user_manipulator')->create($username,
$password, $email, $active, $superadmin);
Ejemplo:
$this->get('fos_user.util.user_manipulator')->create('victor', 'slim',
'vic...@gmail.com', true, true);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Poner roles a usuarios:
La mejor forma es:
$fosUser = $this->get('fos_user.user_manager')->findUserBy(array('id'
=> $id)); //obtenemos el usuario al que le pondremos un nuevo rol
$fosUser->addRole('ROLE_ADMIN');
$this->get('fos_user.user_manager')->updateUser($fosUser, true);
//-------------------------------------------------------------------------------------------------
En caso de que queramos ponerle los roles desde cero a un usuario,
eliminándole los roles que ya tenía para incoporarle los nuevos:
En el caso de queramos ponerle un nuevo rol al usuario con el que
estamos logueado:
$userSession = $this->get('security.context')->getToken()->getUser();
//obtenemos nuestro propio objeto
$array[] = 'ROLE_NEW';
$userSession->setRoles($array);
$this->get('fos_user.user_manager')->updateUser($userSession, true);
//el true significa que dé automáticamente flush, de no ser así se
puede poner en false y en la siguiente línea poner "$em->flush();"
//-------------------------------------------------------------------------------------------------
En el caso de que queramos agregarle un nuevo rol a un usuario sin
quitarle los que tenía puesto:
$fosUser = $this->get('fos_user.user_manager')->findUserBy(array('id'
=> 5)); //obtenemos el usuario que queramos modificar
$rolesUser = $fosUser->getRoles(); //obtenemos los roles de dicho usuario
$rolesUser[] = 'ROLE_PROFESOR'; //le agregamos el nuevo rol
$fosUser->setRoles($rolesUser);
$this->get('fos_user.user_manager')->updateUser($fosUser, true);
//-------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Saber si un usuario tiene un rol dado:
.../vendor/bundles/FOS/UserBundle/Util/UserManipulator.php
Verificar que el usuario "victor" tenga el rol "ROLE_SUPER_ADMIN"
//----------------------------------------------------------------------------------------------
Buscar el usuario al que verificaremos si tiene un rol dado:
$fosUser = $this->get('fos_user.user_manager')->findUserBy(array('username'
=> 'victor'));
Si se trata de verificar a nuestro propio usuario que está autenticado
en ese instante sería:
$fosUser = $this->get('security.context')->getToken()->getUser();
//aquí obtenemos directamente a victor
//----------------------------------------------------------------------------------------------
Verificar que dicho usuario tiene el rol arriba mencionado:
if ($fosUser->hasRole('ROLE_SUPER_ADMIN')) {
return true;
}
Bueno espero te sirva
Saludos Cordiales
El 27/03/12, German Macas <gero...@hotmail.com> escribió:
>
> Que tal.
>
> Estas enviando desde el action del controlador el objeto Usuario??
>
--
"Enviado desde mi iPhone"
======================
"por favor, sé breve, no me envíes un correo de más de 400 palabras"
public function __toString()
{
return $this->getNombre().' '.$this->getApellidos();
}
Debes agregarla en cada clase que tengas en por ejemplo
".../src/DataCimex/HactivatorBundle/Entity"
mejor que sea así:
public function __toString() {
return sprintf('%s', $this->getName());
}
observa que $this->getName() eso depende de los atributos que tengas
en cada clase
El 27/03/12, Danny alfonzo Viana perez <dannyfi...@gmail.com> escribió:
> Cramba Victor esa si es una respuesta! jajajaja, muchas gracias, acabo de
> dar con el problema por mi mismo y es precisamente lo que me dices, debo
> acceder al objeto de la manera {{ app.user }} pero el manual que estoy
> siguiendo dice que es porque en la entidad Usuario definí un método mágico:
>
> public function __toString()
> {
> return $this->getNombre().' '.$this->getApellidos();
> }
>
> esta parte no la entiendo en realidad y me gustaría
>
> PD: lo que no veo es exactamente donde se crea el objeto "app" o "usuario"
> quien lo hace? el firewall al loguear? donde puede verlo? porque el objeto
> se llama app? no entiendo todo esto.
>
>
> On Tuesday, March 27, 2012 5:44:00 PM UTC-4:30, Danny alfonzo Viana perez
> wrote:
>>
>> Saludos amigos, estoy aprendiendo a usar el firewall para loguear a los
>> usuarios en symfony 2 y les comento:
>>
>>
>> 1. Cree un SitioBundle y un UsuarioBundle
>> 2. Cree el Entity Usuario
>> 3. Cree el fixtures para usuarios y lo cargue a la base de datos
>> perfectamente
>> 4. Cree el formulario de login de usuario UsuarioType en el directorio
>> form del UsuarioBundle
>> 5. Dentro del UsuarioBundle en el DefaultController hago el
>> loginAction()
>> 6. Ahora en el SitioBundle en el DefaultController hago el
>> principalAction() que simplemente dirige a la plantilla principal, esta
>> a
>> su ves extiende al menú del sistema y este extiende a la plantilla
>> base.
>> 7. mi problema es que en la plantilla del menú del sistema tengo este
>> codigo:
>>
>>
>> {% if is_granted('ROLE_USUARIO') %}
>>
>> Conectado como <a href="{{ path('usuario_info') }}">{{ usuario.nombre
>> }}</a>
>>
>> <a href="{{ path('usuario_logout') }}">Cerrar sesión</a>
>>
>> {% else %}
>>
>> <a class="topnav" href="{{ path('usuario_login') }}" >Acceder</a>
>>
>> {% endif %}
>>
>> El cual me da este error:
>> Variable "usuario" does not exist in ::menu.html.twig at line 17
>>
>> si le quito {{ usuario.nombre }} la plantilla funciona y me muestra que el
>>
>> usuario esta logueado
>>
>> OSEA que si loguea a los usuarios pero no crea el objeto usuario con todos
>>
>> sus atributos en la session?
>>
>> o me esta faltando algo para poder acceder a este objeto?
>>
>> Agradezco su ayuda!
>>
>>
>