Instalando sfDoctrineGuardPlugin

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:
login

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

Categoría: Programación  Etiquetas:
Puedes seguir los comentarios de esta entrada a través del feed RSS 2.0. Puedes dejar un comentario, o un trackback hacia tu propio sitio web.
8 respuestas
  1. Agustin dice:

    Como hago para me que muestre automaticamente el formulario de logueo?

  2. Leo dice:

    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…

  3. Osukaru dice:

    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.

  4. Federico Hoerth dice:

    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??

  5. Osukaru dice:

    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.

  6. Huascar dice:

    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

Deja un comentario

XHTML: Puedes usar los siguientes tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Better Tag Cloud