Exemplo n.º 1
0
 /**
  * Funcion que realiza el filtro correspondiente
  */
 public function filter(En_HttpRequest $request, En_HttpResponse $response)
 {
     //Leo el archivo de configuracion de seguridad
     $seguridad = $this->context->readConfigurationFile('authorization');
     //Tipo por defecto
     $user_logged = 'default';
     if ($request->session->exist('user_logged')) {
         //Si existe le asigno el tipo correspondiente
         $user_logged = $request->session->get('user_logged');
     }
     //Compruebo que exista la configuracion para el tipo de usuario logueado
     if (isset($seguridad[$user_logged])) {
         //Seteo la configuracion del usuario correpondiente
         $config_seguridad = $seguridad[$user_logged];
         //Seteo los permisos del usuario
         $permisos = $config_seguridad['permit'];
         $mapea = FALSE;
         //Recorro sus permisos y veo si alguno coincice
         foreach ($permisos as $permiso) {
             if (Http\UrlUri::mapsActualUrl($permiso)) {
                 //Cuando alguno coincide salgo del for
                 $mapea = TRUE;
                 break;
             }
         }
         if ($mapea) {
             //Si hubo mapeo, recorro las url denegadas para el usuario
             $denegados = $config_seguridad['deny'];
             foreach ($denegados as $denegado) {
                 if (Http\UrlUri::mapsActualUrl($denegado)) {
                     //Si la url es denegada salgo del for
                     $mapea = FALSE;
                     break;
                 }
             }
         }
         if (!$mapea) {
             //Si no tiene permiso es redireccionado
             $response->redirect($config_seguridad['error']);
         }
     } else {
         //Si no existe la configuracion aviso del error
         echo "No existe definicion de seguridad para {$user_logged}";
         $request->session->deleteSession();
         exit;
     }
 }
Exemplo n.º 2
0
 /**
  * Analiza los filtros que mapean con la URI pasada y ejecuta los que correspondan. En caso de no pasar URI se utiliza
  * la de la peticion actual.
  * @param array[array] $filters
  * @param string $uriapp
  */
 protected function executeFilters($filters, $uriapp = NULL)
 {
     //Analizo los filtros y los aplico en caso de que corresponda
     foreach ($filters as $filter_esp) {
         $filter = UrlUri::mapsActualUrl($filter_esp['filtered'], $uriapp);
         //Si debe filtrar carga el filtro correspondiente y realiza el llamo al metodo filtrar()
         if ($filter) {
             $dir = $this->buildDir($filter_esp, 'filters');
             $class = $this->buildClass($filter_esp);
             if (!class_exists($class)) {
                 //Si la clase no existe intento cargarla
                 if (file_exists($dir)) {
                     require_once $dir;
                 } else {
                     //Avisa que el archivo no existe
                     Error::general_error('Controller Error', 'The controller ' . $filter_esp['class'] . ' dont exists');
                 }
             }
             $filterIns = new $class();
             //Analizo si hay parametros en la configuracion
             if (isset($filter_esp['properties'])) {
                 $this->app->dependenciesEngine->injectProperties($filterIns, $filter_esp['properties']);
             }
             //Analiza si existe el metodo filtrar
             if (method_exists($filterIns, 'filter')) {
                 $filterIns->filter($this->httpRequest, $this->httpResponse);
             } else {
                 Error::general_error('Filter Error', 'The filter ' . $filter_esp['class'] . ' dont implement the method filter()');
             }
         }
     }
 }