/** * 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; } }
/** * 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()'); } } } }