13.3.1. Autenticación
La seguridad de las aplicaciones Symfony se controla mediante un archivo en formato YAML llamado security.yml
. Si quieres ver la configuración por defecto de la seguridad de la aplicación backend
, puedes acceder al archivo config/security.yml
de la aplicación:
# apps/backend/config/security.yml
default:
is_secure: off
Si cambias el valor de la opción is_secure
a on
, la aplicación backend
requerirá a partir de ese momento que los usuarios estén autenticados.
Nota En los archivos YAML, los valores booleanos se pueden indicar con las cadenas de texto true
y false
o con los valores on
y off
.
Si echas un vistazo a los mensajes de log de la barra de depuración web, verás que cada vez que intentas acceder a una página de la aplicación backend
se ejecuta el método executeLogin()
de la clase defaultActions
.
Cuando un usuario que no ha sido autenticado intenta acceder a una acción restringida, Symfony reenvía la petición a la acción de login
configurada en el archivo settings.yml
:
all:
.actions:
login_module: default
login_action: login
Nota No es posible restrigir la seguridad de la acción login
para evitar recursiones infinitas.
Nota Como vimos en el tutorial del día 4, un mismo archivo de configuración se puede definir en diferentes directorios. Este también es el caso del archivo security.yml
. Si sólo quieres restringir o permitir el acceso a una acción o a un módulo, crea un archivo llamado security.yml
en el directorio config/
de ese módulo:
index:
is_secure: off
all:
is_secure: on
La clase myUser
hereda por defecto de sfBasicSecurityUser y no de sfUser
. La clase sfBasicSecurityUser
incluye métodos adicionales para gestionar la autenticación y autorización de usuarios.
Si quieres controlar la autenticación de los usuarios, puedes utilizar los métodos isAuthenticated()
y setAuthenticated()
:
if (!$this->getUser()->isAuthenticated())
{
$this->getUser()->setAuthenticated(true);
}
13.3.2. Autorización
Además de la autenticación de los usuarios, se puede restringir todavía más el acceso a algunas acciones mediante la definición de credenciales. Para acceder a una página determinada, el usuario debe contar con ciertas credenciales:
default:
is_secure: off
credentials: admin
El sistema de credenciales de Symfony es bastante sencillo pero muy poderoso. Cada credencial puede representar cualquier cosa que requiera el modelo de seguridad de tu aplicación (como por ejemplo grupos o permisos).
La clase sfBasicSecurityUser
incluye varios métodos para gestionar las credenciales de los usuarios:
// Add one or more credentials
$user->addCredential('foo');
$user->addCredentials('foo', 'bar');
// Check if the user has a credential
echo $user->hasCredential('foo'); => true
// Check if the user has both credentials
echo $user->hasCredential(array('foo', 'bar')); => true
// Check if the user has one of the credentials
echo $user->hasCredential(array('foo', 'bar'), false); => true
// Remove a credential
$user->removeCredential('foo');
echo $user->hasCredential('foo'); => false
// Remove all credentials (useful in the logout process)
$user->clearCredentials();
echo $user->hasCredential('bar'); => false
En la parte de administración de Jobeet no vamos a utilizar credenciales porque sólo tenemos un perfil de usuario: el administrador.