/** * 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; } }
/** * Ejecuta el controlador que mapeo anteriormente. Segun su definicion en la configuracion se ejecutara al estilo REST * o mediante nombre de funciones * @param array $controller_esp * @param string $uriapp */ protected function executeController($controller_esp, $uriapp = NULL) { $dir = $this->buildDir($controller_esp); $class = $this->buildClass($controller_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 ' . $controller_esp['class'] . ' dont exists'); } } $controller = new $class(); //Agrego los parametros URI $uri_params = UrlUri::uriParams($controller_esp['url'], $uriapp); $dinamic_method = $uri_params['dinamic']; $method = $uri_params['method']; $controller->setUriParams($uri_params['params']); //Analizo si hay parametros en la configuracion if (isset($controller_esp['properties'])) { $this->app->dependenciesEngine->injectProperties($controller, $controller_esp['properties']); } //Saca el metodo HTPP y en base a eso hace una llamada al metodo correspondiente $methodHttp = $_SERVER['REQUEST_METHOD']; if ($dinamic_method) { if (method_exists($controller, $method)) { $controller->{$method}($this->httpRequest, $this->httpResponse); } else { Error::general_error('HTTP Method Error', "The HTTP method {$method} is not supported"); } } else { switch ($methodHttp) { case 'GET': $controller->doGet($this->httpRequest, $this->httpResponse); break; case 'POST': $controller->doPost($this->httpRequest, $this->httpResponse); break; case 'UPDATE': $controller->doUpdate($this->httpRequest, $this->httpResponse); break; case 'DELETE': $controller->doDelete($this->httpRequest, $this->httpResponse); break; case 'HEAD': $controller->doHead($this->httpRequest, $this->httpResponse); break; case 'TRACE': $controller->doTrace($this->httpRequest, $this->httpResponse); break; case 'URI': $controller->doUri($this->httpRequest, $this->httpResponse); break; case "OPTIONS": $controller->doOptions($this->httpRequest, $this->httpResponse); break; case 'CONNECT': $controller->doConnect($this->httpRequest, $this->httpResponse); break; default: Error::general_error('HTTP Method Error', "The HTTP method {$methodHttp} is not supported"); } } }
/** * Redirecciona a una pagina externa a la aplicacion actual * @param string $url */ public function external_redirect($url) { UrlUri::externalRedirect($url); }