AppControllerFilter
Para agregar seguridad a una aplicación, se debe agregar un archivo con el nombre AppControllerFilters.php en el directorio de
la aplicación, por ejemplo yupp/apps/blog. Ese archivo tendrá un contenido similar al siguiente:
class AppControllerFilters implements IAppControllerFilters {
// Filtros que se verifican antes de la ejecución de las acciones de un controller
public static function getBeforeFilters()
{
return array('SecurityFilter'); // Lista de clases con filtros (definidos abajo)
}
// Filtros que se verifican luego de la ejecución de las acciones de un controller
public static function getAfterFilters()
{
return array();
}
}
class SecurityFilter extends YuppController implements IControllerBeforeFilter {
/*
* Ejemplos de controllerActions>
*
* 1. Que controllers y que acciones
*
* $controllerActions = array("page"=>array("create","list","edit"), "user"=>array("list","show"));
*
* 2. Que controllers, todas las acciones (para controller page)
*
* $controllerActions = array("page"=>"*", "user"=>array("list","show"));
*
* 3. Todos los controllers y todas las acciones.
*
* $controllerActions = "*";
*
*
* Para exceptControllerActions sirven solo los formatos 1 y 2.
*/
// Lista de controllers a los que se aplica este filter.
// Pueden ser: un array (controller), un nombre de un 'app.controller' o una action, "app.*" que es "para todos".
private $controllerActions = "*";
// Lista de controllers a los que no aplica el filtro
// UsuariosController y acciones login y logout
private $exceptControllerActions = array(
"usuarios"=>array("login", "logout")
);
public function getAllFilters()
{
return $this->controllerActions;
}
public function getAllExceptions()
{
return $this->exceptControllerActions;
}
/**
* Debe retornar true si pasa o un ViewCommand si no pasa, o sea redireccionar o
* ejecutar una accion de un cotroller o hacer render de un string.
*/
public function apply($app, $controller, $action)
{
// Ejemplo de verificación de permisos
// Si el usuario está logueado, lo obtiene de la sesión
$u = YuppSession::get("usuario_autorizado");
// Si no está logueado, se redirige a la acción de login
if ($u == NULL)
{
$this->flash['message'] = "No tiene permisos suficientes para realizar la acción";
return $this->redirect( array("controller" => "usuarios",
"action" => "login") );
}
// Aquí se puede verificar el tipo de permisos que tiene el usuario, y según el controller y acción,
// se lo puede dejar pasar o no.
// Si está logueado, pasa el filtro (retornando true)
return true;
}
}