Una de las características más habituales de cualquier aplicación es la autentificación de usuarios para asegurar diferentes partes de la aplicación. El plugin sfDoctrineGuardPlugin nos facilita la implementación de esta tarea. Para instalar y habilitar este plugin tenemos que seguir estos sencillos pasos:
- Lo primero que tenemos que hacer es instalar el plugin en nuestro proyecto. Podemos ejecutar la tarea de instalación:
symfony plugin:install sfDoctrineGuardPlugin
para lo que tenemos que tener instalado PEAR, pero como últimamente PEAR y yo no nos hablamos, pues vamos a descargarnos el paquete y lo descomprimimos en la carpeta plugins de nuestro proyecto (lo renombramos quitándole la numeración de la versión: sfDoctrineGuarPlugin). - Ahora activamos el plugin en el archivo config/ProjectConfiguration.class.php de nuestro proyecto:
class ProjectConfiguration extends sfProjectConfiguration { public function setup() { $this->enablePlugins(array( 'sfDoctrinePlugin', 'sfDoctrineGuardPlugin', '...' )); } } - Reconstruimos el modelo y actualizamos la base de datos:
symfony doctrine:build --all
Ahora ya tenemos el plugin instalado. Lo siguiente que vamos a hacer es cargar los datos de prueba (que consisten en un usuario administrador):
- Copiamos el fichero plugins/sfDoctrineGuardPlugin/data/fixtures/fixtures.yml.sample en data/fixtures/sfGuard.yml y cargamos los datos:
symfony doctrine:data-load
Bien, ya sólo nos queda habilitar los módulos que vayamos a utilizar y configurarlos correctamente.
- En el frontend, abrimos el archivo settings.yml y añadimos el módulo sfGuardAuth y lo configuramos:
all: .settings: enabled_modules: [default, sfGuardAuth] login_module: sfGuardAuth login_action: signin secure_module: sfGuardAuth secure_action: secure
- Editamos la clase myUser.class.php para cambiar la clase de la que hereda:
class myUser extends sfGuardSecurityUser { } - Opcionalmente podemos cambiar el archivo routing.yml añadiendo la siguiente configuración al comienzo del archivo:
sf_guard_signin: url: /login param: { module: sfGuardAuth, action: signin } sf_guard_signout: url: /logout param: { module: sfGuardAuth, action: signout } sf_guard_password: url: /request_password param: { module: sfGuardAuth, action: password } - En el archivo security.yml podemos asegurar los módulos que queramos o la aplicación completa:
default: is_secure: true
Y ya está!!! Ahora si accedemos a cualquier módulo de la aplicación y no estamos autentificados nos pedirá el usuario y el password:

Para el backend podemos habilitar los módulos sfGuardGroup, sfGuardPermission, sfGuardUser que nos permitirán manejar usuarios, grupos y permisos.

Como hago para me que muestre automaticamente el formulario de logueo?
Hola, tengo una pregunta:
Habilite los modulos sfGuardGroup, sfGuardPermission, sfGuardUser, y pude “administrar” a usuarios, permisos y grupos, ahora quisiera saber como puedo hacer para bloquear algunas acciones segun el usuario y sus permisos.
Gracias…
Creo q lo pude hacer usando credenciales…
Para “bloquear” una acción lo más sencillo es crearte una carpeta “config” en el módulo con un archivo security.yml. En ese archivo, si sólo quieres que haya que estar autentificado pues pondrías algo así (te pongo el ejemplo para index):
index:
is_secure: true
Y si quieres que haya que tener un permiso determinado, por ejemplo de lectura, pues sería algo así:
index:
credentials: [lectura]
Naturalmente tendrías que dar de alta el permiso “lectura” en la tabla de permisos.
Muchas gracias!! Salio perfecto
Hola.. como estas?
Queria hacerte una pregunta… estuve haciendo un formulario en el que intento guardar informacion en dos tablas : sf_guard_user y usuario (en el que es un perfil del usuario, incluyendo nombre apellido, etc etc etc)
A la hora de $form->isValid() -> true, tengo que insertar en la base de datos
Entonces hago lo siguiente
$usuario->new sfGuardUser();
$usuario->setEmailAddress(‘prueba@mail.com’);
$usuario->setPassword(‘contrasenadeprueba’);
Y me lanza el siguiente error :
500 | Internal Server Error | Doctrine_Record_UnknownPropertyException
Unknown record property / related component “salt” on “sfGuardUser”
Sabrías decirme que es lo que estoy haciendo mal??
Así a simple vista no te sabría decir qué estás haciendo mal, ya que no sé cómo has hecho la relación entre sf_guard_user y usuario ni cómo son las clases del modelo. Sin embargo, puede que te resulte de utilidad este post Relaciones 1:1 transparentes en Doctrine.
saludos he estado tratando de instalar el plugins asi como tu lo indicas pero cuando llego a la parte Reconstruimos el modelo y actualizamos la base de datos:
symfony doctrine:build –all
me da el siguiente error
PHP Fatal error: Uncaught exception ‘InvalidArgumentException’ with message ‘The plugin “…” does not exist.’ in /var/www/prueba/lib/vendor/symfony/lib/config/sfProjectConfiguration.class.php:460
sabras como solucionar eso
saludos y muchas gracias por el manual