$session_life) { $this->terminaSesion(); } }else $this->terminaSesion(); $_SESSION['timeout'] = time(); if(!isset($_SESSION['usuario_id']) || $_SESSION['usuario_id'] == '') $this->terminaSesion(); //existe id en sesión? if(array_key_exists("usuario_id", $_SESSION) && is_numeric($_SESSION["usuario_id"]) && $_SESSION["usuario_id"] > 0){ if(is_int($submenu)){ $this->obtenerNombrePagina($pdo, $submenu); //valida permisos $stmt = $pdo->prepare('Select * from alu_fs_validapermisos(:rol, :sub)');//devuelve: permiso, edicion $stmt->bindParam(":rol", $_SESSION["RolUsuario_id"]); $stmt->bindParam(":sub", $submenu); if(!$stmt->execute()){ $this->hasError = true; $this->error = $stmt->errorInfo(); }else{ $rs = $stmt->fetch(); $stmt->closeCursor(); // cierra conexion de resultado $stmt = null; // cierra conexion //si es administrador de sistema, siempre es true $this->acceso = (bool) $rs["permiso"]; $this->edicion = (bool) $rs["edicion"]; $rs = null; } }else if(is_array($submenu)){ $stmt = $pdo->prepare('Select * from alu_fs_validapermisos(:sub, :sist)');//devuelve: permiso, edicion $stmt->bindParam(":sist", $this->sistema); foreach($submenu as $subItem){ if(!$this->hasError){ //valida permisos $stmt->bindParam(":sub", $subItem); if(!$stmt->execute()){ $this->hasError = true; $this->error = $stmt->errorInfo(); }else{ $rs = $stmt->fetch(); //si es administrador de sistema, siempre es true $this->acceso = $this->acceso || (bool) $rs["permiso"]; $this->edicion = $this->edicion || (bool) $rs["edicion"]; $rs = null; } } } $stmt->closeCursor(); // cierra conexion de resultado $stmt = null; // cierra conexion }else if(is_null($submenu)){ //Valida permisos de acceso sistema $stmt = $pdo->prepare('Select * from fs_validasistema(:usr, :sist)');//devuelve: permiso, edicion $stmt->bindParam(":usr", $_SESSION["usuario_id"]); $stmt->bindParam(":sist", $this->sistema); if(!$stmt->execute()){ $this->hasError = true; $this->error = $stmt->errorInfo(); }else{ $rs = $stmt->fetch(); $stmt->closeCursor(); // cierra conexion de resultado $stmt = null; // cierra conexion $this->acceso = (bool) $rs["permiso"]; $this->edicion = false;//acceso a sistema no tiene edición $rs = null; } }else{ $this->hasError = true; $this->error = "Dato no válido en validación de permisos"; } }else{ $this->error = "No existe la llave en sesión"; $this->hasError = true; $this->acceso = false; $this->edicion = false; } if($this->hasError){ $this->acceso = false; $this->edicion = false; } } private function obtenerNombrePagina($pdo, $submenu){ $this->pagina = ''; try { $stmt = $pdo->prepare('SELECT "Submenu_desc" FROM fs_menusubmenus(:sist) WHERE "Submenu_id" = ' . $submenu ); $stmt->bindParam(":sist", $this->sistema); if($stmt->execute()){ $temp = $stmt->fetch(); if (isset($temp['Submenu_desc'])) $this->pagina = $temp['Submenu_desc']; } } catch (\PDOException $ex) {} $stmt->closeCursor(); $stmt = null; } function nombrePagina(){ return $this->pagina; } function tieneAcceso(){ return $this->acceso; } function puedeEditar(){ return $this->acceso && $this->edicion; } function tieneError(){ return $this->hasError; } function getError(){ return $this->error; } function terminaSesion(){ $_SESSION = array(); session_destroy(); header('Location: salir.php?expired=1'); exit(); } public static function salirPagina(){ $_SESSION = array(); session_destroy(); header('Location: salir.php'); exit(); } public static function errorBD(){ $_SESSION = array(); session_destroy(); header('Location: error.php'); exit(); } }