Ir para conteúdo

POWERED BY:

Arquivado

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

Adson aquino

[Resolvido] Sistema de login com Grupos

Recommended Posts

Fiz um sistema de login e gostaria de adicionar agora o cadastro de grupos e dentro dos grupos os usuários, porque eu quero limitar o acesso a determinadas páginas por grupos, privilegios, como poderia fazer isso, alguém poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Passando a lógica:

 

Você cria outra tabela, com 3 campos, chamada "grupos". Defina esses três campos

 

id_grupo - INT - 10 - auto_increment - PRIMARY KEY

nome_grupo - VARCHAR - 255

permissao - INT - 10

Ae você adiciona um campo na tabela "usuarios":

 

grupo - INT - 10

Feito isso, você cria um sistema pra inserir os grupos com variados níveis de permissão, por exemplo:

 

Nível 3 - Acesso inrestrito a todos os arquivos - Valor: 3

Nível 2 - Acesso apenas a algumas pastas e arquivos - Valor: 2

Nível 1 - Acesso restrito, não pode acessar nada - Valor: 1

Com isso em mãos, basta implementar um INNER JOIN no teu SELECT do login, assim:

 

$sql_login = "SELECT * FROM usuarios INNER JOIN grupos ON usuarios.grupo=grupos.id_grupo WHERE usuarios.nome='$nome' AND usuarios.senha='$senha'";

 

Agora tu cria um simples IF para cada tipo de permissão:

 

$query = mysql_query($sql_login);
$row = mysql_fetch_array($query);
if($row["permissao"] != '1') {

   echo "Você tem acesso liberado!";
}
else {

   echo "Acesso Negado";
}

 

Ae é só implementar, faze uma segurança maior e tal.

 

Falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, nao consegui fazer isso nemm a paaaaaaaaaal .

 

quer dizer, eu fiz, mas nao funcionou, tem como dar uma olhada nos meus codigos ai ?

 

 

LINK DOS CODIGOS

 

esta na pagina "func_login.php".

E a parte de criar as tabelas e os campos esta no arquivo "sql/install.php"

 

eu naoo conseguir inserir o IF no "func_login.php"

 

vee ae a linha que devo inserir !

 

ajudaa ae,

 

valeuuuu !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, nao consegui fazer isso nemm a paaaaaaaaaal .

 

quer dizer, eu fiz, mas nao funcionou

Isto não ajuda em nada na solução do seu problema. Qual erro apareceu? Como se comportou e como era o esperado?

Não somos helpdesk. Poste o código do func_login.php e poderemos te ajudar...

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto não ajuda em nada na solução do seu problema. Qual erro apareceu? Como se comportou e como era o esperado?

Não somos helpdesk. Poste o código do func_login.php e poderemos te ajudar...

 

Carlos Eduardo

 

rs, tenta me ajudar ae !

 

 

 

arquivo func_login

 

<?php
$data='';
# Possiveis valores para data
# 0: Campos em branco
# 1: Login/Senha errados
# 2: Login efetuado
# 3: Erro do servidor (mysql,bd,query)
# 4: Captcha incorreto

// Pega as configuracoes
include('config.php');

// Funcao para conectar
Function ConectaMysql(){
	$conecta = mysql_connect(M_HOST,M_USUARIO,M_SENHA) or exit();
	$banco = mysql_select_db(M_BD,$conecta) or exit();
	mysql_errno()==0 ? $r=true : $r=false;
return $r;
}

// Funcao para filtrar (Anti-SQL-Injection)
Function Filtrar($str){
	$sql = preg_replace(sql_regcase('/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/'),'',$str);
	$sql = trim($str);
	$sql = strip_tags($str);
	$sql = addslashes($str);
return $str;
}

// Pega as variaveis e checa-as
if( $_SERVER['REQUEST_METHOD'] == 'POST' ){
	$usuario = Filtrar($_POST['usuario']);
	$senha = Filtrar($_POST['senha']);
	if( L_USAR_CAPTCHA == '1' ){
		include_once('extra/recaptcha.php');
		$resp = recaptcha_check_answer(PRIVATE_KEY,$_SERVER['REMOTE_ADDR'],$_POST['recaptcha_challenge_field'],$_POST['recaptcha_response_field']);
		!$resp->is_valid ? $data='4' : '';
	}
	$usuario=='' ? $data='0' : '';
	$senha=='' ? $data='0' : '';
	!isset($usuario[MIN_USUARIO-1]) || !isset($senha[MIN_SENHA-1]) ? $data='0' : '';
	isset($usuario[MAX_USUARIO]) || isset($senha[MAX_SENHA]) ? $data='0' : '';
	!ctype_alnum($usuario) ? $data='0' : '';
	!ctype_alnum($senha) ? $data='0' : '';
	if($data!='0'){
		USA_MD5 == 1 ? $senha=md5($senha) : '';
	}
	
	// Checa se o usuario existe(seguranca), efetua login
	if($data==''){
		if(ConectaMySQL()){
			$pesquisa = mysql_query("SELECT * FROM users WHERE usuario='".$usuario."';");
			if($pesquisa and mysql_num_rows($pesquisa)>0 and mysql_errno()==0){
				$loga = mysql_query("SELECT * FROM users INNER JOIN grupos ON users.grupo=grupo.id_grupo WHERE usuario='".$usuario."' and senha='".$senha."';");
				  if($loga['permissao'] !='1') {
            echo "Voce tem permissão!";
              else {
                echo "Acesso negado";
               } 
            else($data='2')
          }
        if($loga and mysql_num_rows($loga)>0 and mysql_errno()==0){
					setcookie(md5('logincookie75'),md5('5ATIVADO6'),time()+3600*TEMPO_COOKIE,'/');
					$data = '2';
				}
        else{$data='1';}
			}else{$data='1';}
			mysql_close();
		}else{$data='3';}
	}
	
}

// Retorna a data final
echo $data;
?>

 

pagina sql/install.php

 

<?php
# Instalacao simples

// Pega as configuracoes
include('../config.php');

// Funcao para conectar
Function ConectaMysql(){
	$conecta = mysql_connect(M_HOST,M_USUARIO,M_SENHA) or exit('Preencha todas as informacoes corretamente');
	$banco = mysql_select_db(M_BD,$conecta) or exit('Preencha todas as informacoes corretamente');
	mysql_errno()==0 ? $r=true : $r=false;
return $r;
}

// Instala
if(ConectaMysql()){
	/* Deleta a tabela se ela ja existir */
	$query1 = mysql_query('DROP TABLE IF EXISTS users;') or exit('Não foi possível instalar, instale manualmente');

	/* Cria a tabela users*/
	$query2 = mysql_query('
	CREATE TABLE users(
		id TINYINT NOT NULL primary key auto_increment,
		nome VARCHAR(32) NOT NULL,
		usuario VARCHAR(32) NOT NULL,
		senha VARCHAR(32) NOT NULL,
		grupo TINYINT(10) NOT NULL
	);') or exit('Não foi possível instalar, instale manualmente');;


/*Cria tabela grupos*/
	$query3 = mysql_query('
	CREATE TABLE grupos(
		id_grupo TINYINT(10) NOT NULL primary key auto_increment,
		nome_grupo VARCHAR(255) NOT NULL,
		permissao TINYINT(10) NOT NULL
	);') or exit('Não foi possível instalar, instale manualmente');;

	/* Insere valor teste como padrao */	
	$query4 = mysql_query("
	INSERT INTO users (
		nome,usuario,senha
	) VALUES (
		'admin','admin','21232f297a57a5a743894a0e4a801fc3'
	);") or exit('Não foi possível instalar, instale manualmente');;
	
	if( mysql_errno()==0 ){
		echo "Instalação concluida com sucesso, delete esta pasta para sua segurança";
	}
	mysql_close();
}
?>

 

 

Pagina config.php

<?php
# Configure diante de sua vontade
# Leia os comentarios atentamente
# O reCAPTCHA agora e XHTML Valido
# Uso do reCAPTCHA nao aconselhado no login
# Ha configuracoes que so podem ser colocadas uma vez:
# USA_MD5, MIN_.
# Caso troque-as mais de uma vez, pode causar erros no servidor.

// MySQL
define('M_USUARIO','root');		// Usuario do MySQL
define('M_SENHA','42683971');	// Senha do MySQL
define('M_HOST','localhost');	// Host do MySQL
define('M_BD','expdb');		// Nome do banco de dados

// Configuracoes Login
define('USA_MD5','1');			// Usar encriptacao MD5 (0=NAO) (1=SIM)
define('TEMPO_COOKIE','24');	// Tempo de duracao do cookie (1=UMA HORA)
define('L_USAR_CAPTCHA','0');	// Usar checagem de letras (0=NAO) (1=SIM)
define('P_INDEX','logado.php');	// Pagina protegida que sera acessada apos o login

// Configuracoes Cadastro
define('MIN_USUARIO',4);		// Minimo de caracteres
define('MAX_USUARIO',32);		// Maximo de caracteres (MAX=32)
define('MIN_SENHA',4);			// Minimo de caracteres
define('MAX_SENHA',32);			// Maximo de caracteres (MAX=32)
define('C_USAR_CAPTCHA','0');	// Usar checagem de letras (0=NAO) (1=SIM)

// Configuracoes Captcha
define('PUBLIC_KEY','6LePWwQAAAAAAJ_zwfE0zGyIhjMptUgI3CNXGnph');	// Public Key dado na ReCaptcha
define('PRIVATE_KEY','6LePWwQAAAAAALB6vmvx413jk3uSV_C0tX3psFPn');	// Private Key dado na ReCaptcha

// Mensagens
$msg[0] = 'Preencha todos os campos.';					// Campos nulos 		(Login,Cadastro)
$msg[1][0] = 'Usuário ou senha não correspondem.';		// Erro nas informacoes (Login)
$msg[1][1] = 'Esse usuário já existe, escolha outro.';	// Erro nas informacoes (Cadastro)
$msg[2][0] = 'Login efetuado! Aguarde';					// Sucesso 				(Login)
$msg[2][1] = 'Cadastro efetuado! Aguarde';				// Sucesso 				(Cadastro)
$msg[3] = 'Erro do sistema, tente outra hora.';			// Erro (MySQL,Query) 	(Login,Cadastro)
$msg[4] = 'Campo de verificação incorreto.';			// reCAPTCHA incorreto	(Login,Cadastro)

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual erro apareceu? Como se comportou e como era o esperado?

Repito a pergunta porque você não respondeu. Não vou ler seu código inteiro. Se quer ajuda, ajude-nos a te ajudar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parceiro,

 

Percebi que no teu sist. de login você não define um cookie com o nome de usuário, nem a senha, muito menos o id do user que está logado.

 

Dessa forma, fica impossível resgatar dados do BD, já que você não tem nada para pesquisar. O que fiz no código abaixo foi inserir um comando para definir o cookie "&us3riD&", criptografado com base64_encode(). Ae depois recuperei esse id no arquivo trancar.php e busquei as informações do usuário referente. Então, fiz o simples IF que me permite verificar se o usuário tem acesso à página ou não.

 

Segue arquivos modificados:

 

func_login.php

<?php
$data='';
# Possiveis valores para data
# 0: Campos em branco
# 1: Login/Senha errados
# 2: Login efetuado
# 3: Erro do servidor (mysql,bd,query)
# 4: Captcha incorreto

// Pega as configuracoes
include('config.php');

// Funcao para conectar
Function ConectaMysql(){
$conecta = mysql_connect(M_HOST,M_USUARIO,M_SENHA) or exit();
$banco = mysql_select_db(M_BD,$conecta) or exit();
mysql_errno()==0 ? $r=true : $r=false;
return $r;
}

// Funcao para filtrar (Anti-SQL-Injection)
Function Filtrar($str){
$sql = preg_replace(sql_regcase('/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/'),'',$str);
$sql = trim($str);
$sql = strip_tags($str);
$sql = addslashes($str);
return $str;
}

// Pega as variaveis e checa-as
if( $_SERVER['REQUEST_METHOD'] == 'POST' ){
$usuario = Filtrar($_POST['usuario']);
$senha = Filtrar($_POST['senha']);
if( L_USAR_CAPTCHA == '1' ){
	include_once('extra/recaptcha.php');
	$resp = recaptcha_check_answer(PRIVATE_KEY,$_SERVER['REMOTE_ADDR'],$_POST['recaptcha_challenge_field'],$_POST['recaptcha_response_field']);
	!$resp->is_valid ? $data='4' : '';
}
$usuario=='' ? $data='0' : '';
$senha=='' ? $data='0' : '';
!isset($usuario[MIN_USUARIO-1]) || !isset($senha[MIN_SENHA-1]) ? $data='0' : '';
isset($usuario[MAX_USUARIO]) || isset($senha[MAX_SENHA]) ? $data='0' : '';
!ctype_alnum($usuario) ? $data='0' : '';
!ctype_alnum($senha) ? $data='0' : '';
if($data!='0'){
	USA_MD5 == 1 ? $senha=md5($senha) : '';
}

// Checa se o usuario existe(seguranca), efetua login
if($data==''){
	if(ConectaMySQL()){
		$pesquisa = mysql_query("SELECT * FROM users WHERE usuario='".$usuario."';");
		if($pesquisa and mysql_num_rows($pesquisa)>0 and mysql_errno()==0){
			$loga = mysql_query("SELECT * FROM users WHERE usuario='".$usuario."' and senha='".$senha."';");
			if($loga and mysql_num_rows($loga)>0 and mysql_errno()==0){

				// Aqui monto o conteúdo do cookie	 
				$arr = mysql_fetch_array($loga); // Monto um array com os dados do BD
				$uid = $arr["id"]; // Pego o id do usuário
				$coded = base64_encode($uid); // Codifico com base64
				$name_cookie = md5("&us3riD&");

				// Aqui defino o cookie $name_cookie

				setcookie($name_cookie, $coded, time()+3600*TEMPO_COOKIE, '/');

				setcookie(md5('logincookie75'),md5('5ATIVADO6'),time()+3600*TEMPO_COOKIE,'/');
				$data = '2';
			}
       else{$data='1';}
		}else{$data='1';}
		mysql_close();
	}else{$data='3';}
}

}

// Retorna a data final
echo $data;
?>

 

trancar.php

<?php
// Trancar pagina apenas para usuarios logados
$name_cookie = md5("&us3riD&");

if(!isset($_COOKIE[md5('logincookie75')]) || $_COOKIE[md5('logincookie75')]!=md5('5ATIVADO6') || !isset($_COOKIE[$name_cookie])){
exit("
	<script type='text/javascript'>
		window.location='login.php';
	</script>
");
}
else {

// Se os cookies existirem, recupero os dados	
$id_search = base64_decode($_COOKIE[$name_cookie]);	// Pego o ID do cookie

// Monto a busca
$sql = "SELECT * FROM usuarios INNER JOIN grupos ON usuarios.grupo=grupos.id_grupo WHERE usuarios.id='$id_search'";

// Executo a busca
$query = mysql_query($sql);

// Pego o número de linhas encontradas
$rows = mysql_num_rows($sql);

// Vejo se o id é válido
if($rows == 1) {

	// Se a verificação correr normalmente, monto um array		
	$arr = mysql_fetch_array($query);
}
else {

	exit("<script>alert('ID inválido. Página não carregada!');</script>");
}
}
?>

 

logado.php

<?php include('trancar.php'); ?>
<p>
<?

// Aqui monto a verificação de grupos
if($arr["permissao"] > 1) {
?>
Este conteúdo é para pessoas com nível de permissão 2 ou 3
<?	
}
else {	
?>
Este conteúdo é para pessoas com nível de permissão 1
<?
}
?>
</p>
<p>
<?php include('menu.php'); ?>
</p>

 

Faça as adaptações necessárias.

 

Falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça as adaptações necessárias.

 

Falo

 

 

Primeiro queria agradecer por tudo ai, obrigado por ter a paciencia de ter lido o codigo.

Mas ai...

 

fiz as adaptacoes mas só da que o "ID Inválido , pagina nao carregada"

 

nome das tabelas: users e grupos

ai fiz a alteracao

 

$sql = "SELECT * FROM users INNER JOIN grupos ON users.grupo=grupos.id_grupo WHERE usuarios.id='$id_search'";

preenchi o campo na tabela grupos: permissao pra 1

e na tabela users, o campo grupo: coloquei 1

 

e nao funcionou .

 

O numero do grupo eu tenho que colocar em md5 ?

 

at.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Faça as adaptações necessárias.

 

Falo

 

 

Primeiro queria agradecer por tudo ai, obrigado por ter a paciencia de ter lido o codigo.

Mas ai...

 

fiz as adaptacoes mas só da que o "ID Inválido , pagina nao carregada"

 

nome das tabelas: users e grupos

ai fiz a alteracao

 

$sql = "SELECT * FROM users INNER JOIN grupos ON users.grupo=grupos.id_grupo WHERE usuarios.id='$id_search'";

preenchi o campo na tabela grupos: permissao pra 1

e na tabela users, o campo grupo: coloquei 1

 

e nao funcionou .

 

O numero do grupo eu tenho que colocar em md5 ?

 

at.

 

 

Edmundo aqui no meu deu certo mais tive que fazer as seguintes alterações no arquivo trancar.php

 

 


<?php

include 'func_login.php';


// Trancar pagina apenas para usuarios logados

$name_cookie = md5("&us3riD&");



if(!isset($_COOKIE[md5('logincookie75')]) || $_COOKIE[md5('logincookie75')]!=md5('5ATIVADO6') || !isset($_COOKIE[$name_cookie])){

        exit("

                <script type='text/javascript'>

                        window.location='login.php';

                </script>

        ");

}

else {



        // Se os cookies existirem, recupero os dados   

        $id_search = base64_decode($_COOKIE[$name_cookie]);     // Pego o ID do cookie

	if(ConectaMysql())
	{

		// Monto a busca

		$sql = "SELECT * FROM users INNER JOIN grupos ON users.grupo=grupos.id_grupo WHERE users.id='$id_search'";

		

		// Executo a busca

		$query = mysql_query($sql);

		

		// Pego o número de linhas encontradas

		$rows = mysql_num_rows($query);

		

		// Vejo se o id é válido

		if($rows == 1) {

		        

		        // Se a verificação correr normalmente, monto um array          

		        $arr = mysql_fetch_array($query);

		}

		else
		{

		        exit("<script>alert('ID inválido. Página não carregada!');</script>");

		}
	}
	else
	{
		exit("<script>alert('Não foi possível conectar ao banco de dados!');</script>");
	}

}

?>

 

Coloco do jeito que ta aí que da certo, falow.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja seu erro:

 

$sql = "SELECT * FROM users INNER JOIN grupos ON users.grupo=grupos.id_grupo WHERE usuarios.id='$id_search'";

Mude de usuários para users.

 

Falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, estoou aqui novamente com uma nova dúvida, esse sistema de login eu implantei ele em um sistema de cadastro de vendas, só que agora eu queria fazer o seguinte,

quando o usuário x se logar ele conseguir visualizar somente os cadastros feitos por ele, alguém poderia mim dizer mais ou menos como faço iss, obg.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, mantenha uma dúvida por tópico.

 

Sobre a sua dúvida, você grava o id do usuário em SESSION, certo? Então é só fazer a consulta dos cadastros feitos por ele, ou seja, na tabela de cadastros você grava o id de quem está fazendo. Na hora do select você usa o id na cláusula do where.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou tudo na suas condicoes, só que estou tentando fazer com que quando loga, chega qual a permissao do usuario, exibe uma msg na tela e depois direciona ele pra pagina que ele tem direito.

 

 

segue o raciocinio:

 

 

        <? 
        // Aqui monto a verificação de grupos 
        if($arr["permissao"] == 1) {   
        ?>
         
        <script>    
        alert ("Este conteúdo é para pessoas com nível de permissão 1!");
        </script>
        
        <?php header('Location: http://www.exp.com.br'); ?>
        
        <?       
        }   

 

a mensagem aparece, mas nao direciona a pessoa pra pagina devida.

 

alguemmm ?????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí você vai ter que fazer o redirecionamento com javascript, porque para o header funcionar, não pode ter nenhuma saída para o browser antes.

 

Carlos Eduardo

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.