Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mauricio.imbe

Login de acesso | MD5 | sessions | com nível de usuário

Recommended Posts

Estou usando um sistema de login com sessions desenvolvido pelo Fabyo que usa nivel_acesso 0(sem permissões), 1(usuário comum) e 2 (Administrador) em um campo enum no db (PHP/MySql).

 

O sistema funciona beleza, mas não estou conseguindo implementar, digo, restringir o acesso à determinadas páginas por nivel_acesso.

 

Pensei que uma solução seria através da session. Deixe eu explicar melhor:

 

No arquivo login.php eu tenho o formulário e o script autentica o usuário e cria a session. Quando cria a session ele faz um array() com os dados digitados nos campos login do form, por exemplo. Se eu conseguisse inserir nesse array(), pegando do db o nivel_usuario, eu poderia criar uma condição para exibição ou redirecionamento da página. Logo teria o nivel_acesso operacional.

 

A dúvida é como usar esse nivel_acesso nesse script?

 

Segue o script, parte do php, login.php:

 

<?php$erro = "";if(getenv("REQUEST_METHOD") == "POST") {	$login  = $_POST["Login"];	$senha = $_POST["Senha"];	if ( get_magic_quotes_gpc() ) {		$login  = stripslashes($_POST["Login"]);		$senha = stripslashes($_POST["Senha"]);	}	$login  = mysql_escape_string($login);	$senha = mysql_escape_string($senha);				$chave = md5( md5(strtolower(trim($login))) . md5(strtolower(trim($senha))) );		$senha = md5($senha);	//coloque seus dados de conexao	mysql_connect("localhost", "mobile", "mobile");	mysql_select_db("login");		$sql   = "SELECT COUNT(*) AS total FROM usuarios WHERE login = '%s' AND senha = '%s' and chave = '$chave' and nivel_acesso > '0'";			$re	= mysql_query(sprintf($sql, $login, $senha));	$total = mysql_result($re, 0, "total");	mysql_close();		if($total == 1) {		$dados = array();		$dados["login"]	 = ucfirst(strtolower($login));		$dados["logado"]   = true;		session_start();		$_SESSION["dados"] = $dados;		header("Location: ../index.php");	} else {			$erro = "Login ou Senha inválidos!";	}}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça um select no usuario e pegue o nivel dele e teste na pagina se o nivel pode ter acesso a ela

 

ou se preferir grave na session o numero do nivel assim você ja testa direto

 

$dados = array();
$dados["nivel"] = 2;// só um exemplo
$dados["login"]	 = ucfirst(strtolower($login));
$dados["logado"]   = true;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica Fabyo!

 

Como solucionei. Não a forma mais "bonita", mas funciona!

 

Colocar este código no topo das páginas que quiser proteger por nivel_acesso.

 

 

<?include("./protecao.php");/////////////////////////////////////////////////////////////////////////////////////////// condição de acesso por nível de usuário/////////////////////////////////////////////////////////////////////////////////////////	mysql_connect("localhost", "login", "senha");	mysql_select_db("nomedobanco");	//nivel acesso	$select_user = mysql_query ("SELECT * FROM nomedatabela WHERE login = '$dados[login]'");	while($row = mysql_fetch_array($select_user))		{		$nivel = $row["nivel_acesso"];		$mostra_nome = $row["nome"];		}			if($nivel != 2) // aqui define a condição de qual nível entra na página (0 - nada, 1 - comum, 2 - administrador)			{			echo			"<p> </p>			<p> </p>			<table width=\"350\" border=\"1\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#FF0000\">			  <tr>				<td>				<center>Você precisa ser Administrador para acessar a página - Gerenciar Login!</center>				</td>			  </tr>			</table>";						exit();			}//echo"$nivel<br>";//echo"$mostra_nome";//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.