session_id(),"nome"=>$teste["usuario"]["nome_usuario"]); cpjson($retorno); } else{ logoutUsuario(); cpjson("logout"); } break; /* Valor: VALIDAOPERACAOUSUARIO Verifica se um usuario pode executar uma operacao Para que o usuario possa executar a operacao, o papel ao qual ele pertence deve estar registrado em operacoespaeis no banco de administracao Se $operacao for vazio, e retornado "sim", o que permite que a verificacao apenas confirme que o login esta correto na sessao Paremeter: $operacao - operacao que sera verificada */ case "VALIDAOPERACAOSESSAO": $retorno = "nao"; if($operacao == ""){ $retorno = "sim"; } else{ if(verificaOperacaoSessao($operacao) == true){ $retorno = "sim"; } else{ logoutUsuario(); } } cpjson($retorno); break; case "RECUPERARSENHA": $retorno = false; if(!empty($usuario)){ $retorno = recuperarSenha(); } cpjson($retorno); break; case "ALTERARSENHA": $retorno = false; if(!empty($usuario)){ $retorno = alterarSenha(); } cpjson($retorno); break; } function alterarSenha(){ global $usuario,$novaSenha; include(__DIR__."/conexao.php"); $dados = pegaDados("select * from ".$esquemaadmin."i3geousr_usuarios where senha = '".md5($_SESSION["senha"])."' and login = '$usuario' and ativo = 1",$locaplic); if(count($dados) > 0){ $dbhw->query("UPDATE ".$esquemaadmin."i3geousr_usuarios SET senha='".md5($novaSenha)."' WHERE login = '$usuario'"); $_SESSION["senha"] = $novaSenha; $to = $dados[0]["email"]; $subject = 'nova senha i3geo'; $message = "Sua senha foi alterada"; mail($to, $subject, $message); return true; } else{ return false; } } function recuperarSenha(){ global $usuario,$novaSenha; include(__DIR__."/conexao.php"); $novaSenha = rand(9000,1000000); $dados = pegaDados("select * from ".$esquemaadmin."i3geousr_usuarios where login = '$usuario' and ativo = 1",$locaplic); if(count($dados) > 0){ $dbhw->query("UPDATE ".$esquemaadmin."i3geousr_usuarios SET senha='$novaSenha' WHERE login = '$usuario'"); $to = $dados[0]["email"]; $subject = 'nova senha i3geo'; $message = $novaSenha; mail($to, $subject, $message); return true; } else{ return false; } } function verificaPapelSessao($id_papel){ $resultado = false; //verifica se e administrador if(validaSessao()){ foreach($_SESSION["papeis"] as $p){ if($p["id_papel"] == 1 || $p["id_papel"] == $id_papel){ return true; } } } return $resultado; } function verificaOperacaoSessao($operacao){ $resultado = false; //avalidacao consulta $_SESSION, que e definida no login if(validaSessao()){ //verifica se e administrador, caso positivo, permite qq operacao foreach($_SESSION["papeis"] as $p){ if($p == 1){ return true; } } if(!empty($_SESSION["operacoes"][$operacao])){ $resultado = true; } } return $resultado; } function validaSessao(){ $fingerprint = 'I3GEOLOGIN' . $_SERVER['HTTP_USER_AGENT']; if($_SESSION['fingerprint'] != md5($fingerprint . session_id())){ return false; } if($_SESSION["usuario"] != $_COOKIE["i3geousuariologin"]){ return false; } return true; } function autenticaUsuario($usuario,$senha){ include(__DIR__."/conexao.php"); $senhamd5 = md5($senha); //verifica se o usuario esta cadastrado no ms_configura.php em $i3geomaster if(verificaMaster($usuario,$senha) == true){ $pa = pegaDados("select * from ".$esquemaadmin."i3geousr_papelusuario ",$locaplic); $op = pegadados("SELECT O.codigo, PU.id_usuario FROM ".$esquemaadmin."i3geousr_operacoes AS O JOIN ".$esquemaadmin."i3geousr_operacoespapeis AS OP ON O.id_operacao = OP.id_operacao JOIN ".$esquemaadmin."i3geousr_papelusuario AS PU ON OP.id_papel = PU.id_papel ",$locaplic); $gr = pegadados("SELECT * from ".$esquemaadmin."i3geousr_grupousuario "); $operacoes = array(); foreach($op as $o){ $operacoes[$o["codigo"]] = true; } $papeis = array(); foreach($pa as $p){ $papeis[] = $p["id_papel"]; } $gruposusr = array(); foreach($gr as $p){ $gruposusr[] = $p["id_grupo"]; } $r = array("usuario"=>"master","papeis"=>$papeis,"operacoes"=>$operacoes,"gruposusr"=>$gruposusr); return $r; } else{ $dados = pegaDados("select * from ".$esquemaadmin."i3geousr_usuarios where login = '$usuario' and (senha = '$senhamd5' or senha = '$senha') and ativo = 1",$locaplic); if(count($dados) > 0){ $pa = pegaDados("select * from ".$esquemaadmin."i3geousr_papelusuario where id_usuario = ".$dados[0]["id_usuario"],$locaplic); $op = pegadados("SELECT O.codigo, PU.id_usuario FROM ".$esquemaadmin."i3geousr_operacoes AS O JOIN ".$esquemaadmin."i3geousr_operacoespapeis AS OP ON O.id_operacao = OP.id_operacao JOIN ".$esquemaadmin."i3geousr_papelusuario AS PU ON OP.id_papel = PU.id_papel WHERE id_usuario = ".$dados[0]["id_usuario"],$locaplic); $gr = pegadados("SELECT * from ".$esquemaadmin."i3geousr_grupousuario where id_usuario = ".$dados[0]["id_usuario"]); $operacoes = array(); foreach($op as $o){ $operacoes[$o["codigo"]] = true; } $papeis = array(); foreach($pa as $p){ $papeis[] = $p["id_papel"]; } $gruposusr = array(); foreach($gr as $p){ $gruposusr[] = $p["id_grupo"]; } $r = array("usuario"=>$dados[0],"papeis"=>$papeis,"operacoes"=>$operacoes,"gruposusr"=>$gruposusr); return $r; } else{ return false; } } } function logoutUsuario(){ $_COOKIE = array(); $_SESSION = array(); session_destroy(); } ?>