Ver índice de contenidos del libro

13.5. La seguridad de la aplicación backend

Cada plugin dispone de su propio archivo README donde se explica cómo se configura. A continuación se muestra cómo configurar el plugin sfGuardPlugin. Como se trata de un plugin que incluye varias clases de su propio modelo de datos para gestionar usuarios, grupos y permisos, lo primero que debemos hacer es volver a generar todas las clases del modelo:

$ php symfony propel:build-all-load --no-confirmation

Nota Recuerda que la tarea propel:build-all-load borra todas las tablas de la base de datos antes de volver a crearlas. Si no quieres borrar las tablas, puedes generar los modelos, formularios y filtros y después, puedes crear las nuevas tablas ejecutando las sentencias SQL generadas en el directorio data/sql.

Como siempre que se crean nuevas clases, no te olvides de borrar la cache de Symfony:

$ php symfony cc

Como el plugin sfGuardPlugin añade varios métodos a la clase del usuario, tienes que modificar la clase de la que hereda myUser a sfGuardSecurityUser:

// apps/backend/lib/myUser.class.php
class myUser extends sfGuardSecurityUser
{
}

El plugin sfGuardPlugin incluye una acción llamada signin en el módulo sfGuardAuth para autenticar a los usuarios:

Modifica el archivo settings.yml para cambiar la acción utilizada por defecto en la página de login:

# apps/backend/config/settings.yml
all:
  .settings:
    enabled_modules: [default, sfGuardAuth]
 
    # ...

  .actions:
    login_module:    sfGuardAuth
    login_action:    signin
 
    # ...

Como los plugins están disponibles en todas las aplicaciones del proyecto, tienes que activar de forma explícita los módulos que quieres utilizar mediante la opción enabled_modules.

Pantalla de login del plugin sfGuardPlugin

Figura 13.5 Pantalla de login del plugin sfGuardPlugin

Por último, crea el usuario de tipo administrador:

$ php symfony guard:create-user fabien ConTraSenA
$ php symfony guard:promote fabien

Nota El plugin sfGuardPlugin incluye tareas para gestionar usuarios, grupos y permisos directamente desde la línea de comandos. Si quieres ver todas las tareas disponibles para el namespace guard, puedes utilizar la tarea list:

$ php symfony list guard

El siguiente paso consiste en no mostrar la barra del menú si el usuario no está autenticado:

// apps/backend/templates/layout.php
<?php if ($sf_user->isAuthenticated()): ?>
  <div id="menu">
    <ul>
      <li><?php echo link_to('Jobs', '@jobeet_job') ?></li>
      <li><?php echo link_to('Categories', '@jobeet_category') ?></li>
    </ul>
  </div>
<?php endif; ?>

Por otra parte, cuando el usuario está autenticado, tenemos que mostrar un enlace para la acción de desconectar que incluye el plugin sfGuardPlugin:

// apps/backend/templates/layout.php
<li><?php echo link_to('Logout', '@sf_guard_signout') ?></li>

Nota Si quieres ver todas las rutas que define sfGuardPlugin, utiliza la tarea app:routes.

Para completar la parte de administración de Jobeet, vamos a añadir un módulo para gestionar los usuarios de tipo administrador. Afortunadamente, el plugin sfGuardPlugin ya incluye un módulo de este tipo. Para utilizarlo, debes activar el módulo llamado sfGuardAuth en el archivo de configuración settings.yml:

# apps/backend/config/settings.yml
all:
  .settings:
    enabled_modules: [default, sfGuardAuth, sfGuardUser]

Y por último, añade un enlace en el menú:

// apps/backend/templates/layout.php
<li><?php echo link_to('Users', '@sf_guard_user') ?></li>
Menú de la parte de administración

Figura 13.6 Menú de la parte de administración

Y eso es todo lo que tenemos que hacer para disponer de una completa gestión de usuarios, grupos y permisos.