Ir para conteúdo

POWERED BY:

Arquivado

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

hernan

Sistema Login com níveis

Recommended Posts

Olá pessoa do Imasters:Esse aqui é meu primeiro post aqui neste forum.Estou querendo sabe e fazer um sistema de login que tenha níveis de segurança para por no site que estou desenvolvendo em PHP+MYSQL, so aque ate agora o que encontrei nos post do forum, é sitema com sessions, etc mas nada com níveis de usuários tipo:- admin;- usuarios avançados;- usuarios comuns.Para restringir acessos a cadastros e tal, que tenham certo tipo de restrição na pagina com login e que depois mostre todos os usuários que estao logados no site....Será que alguem pode me ajudar???Fico grato desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seja bem vindo!Primeira dica: você provavelmente vai usar sessions mesmo. A idéia principal é você criar uma variável de sessão com o nível de permissão do usuário no momento do logon e verificar em todas as páginas q ele acessar.Se puder, faça um classe para controlar isso q fica mais fácil de reutilizar em outros sistemas. E tb para postar depois no Laboratório de Scripts.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw pessoal pelos post tao rápidos: (tmferreira, ignorante) vle mesmoSim, gostaria de fazer um, para depois ajudar outras pessoas que estejam com o mesmo problema que eu tenho....E sim vai ter que ter níveis de acesso....isso é necessário mesmo.Vcs podem me ajudar???Muito obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já precisei desenvolver um sistema de login com níveis de acesso parecido com esse que você quer.O que eu fiz foi fazer os menus do sistema virem todos do banco de dados, assim eu tinha uma terceira tabela onde eu cadastrava as permissões dos usuários, entende, tinha o id do usuário, e os id's dos menus que ele poderia acessar.abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Jonas:Eu tb tenho um sistema de menu , onde todo o menu vem de um banco de dados..... entao é a minha pergunta:como faço um sistema de logim onde quando ele entre com o logim e senha, caia na pagina destinada a ele, tipo se for admin que apareçam todos os menus, e se for outro usuario, que caia na pagina e que restringa os menus de acordo com o nível dele.... e que depois mostre pode ser na index mesmo todos os usuários que estao logados no momento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, pra controlar os acessos, você vai ter que ter uma tabela de permissões, onde você vai colocar o id do usuário e o id os id's dos menus que ele tem acesso, pra isso você pode até criar uma telinha pra cadastrar essas permissões, onde você lista todos os menus e seleciona quais o usuário pode ter acesso, então você cadastra na tabela de permissões, aí quando você for montar o menu, você faz um join nessa tabela pra pegar somente os menus que o usuário que está logando tem acesso.Agora pra ver quem ta on-line, você tem que jogar o usuário que logar numa tabela de usuários on-line, e quando ele sair você deleta ele de lá, ou então simplesmente coloca um flag na tabela de usuários informando se ele está on-line ou off.Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá tmferreira:fiz a tabela da seguinte maneira:create table admin ( id int not null auto_increment,nom_usr varchar(40) not null,login_usr varchar(11)not null,senha_usr varchar(8)not null,nivel_usr varchar(10),ip_usr varchar(15),hora_ult_ativi time,PRIMARY KEY (id));certo?e agora?pronto para o segundo passoGrato

Compartilhar este post


Link para o post
Compartilhar em outros sites

OI

 

Eu tenho este sistema de login....onde somente é um sitema de login, tipo nao é so digitar usuario e senha, ele nao é com níveis de usuario, eu queria aproveirtar ele....da uma olhada nele e ve se da pra aproveitar...

 

 

login.php

<?import_request_variables("gp","tx");if (isset($txuser)){$user = $txuser;$pass = $txpass;$status = authenticate($user, $pass);if ($status == 1)	{	session_start();	session_register("SESSION");	session_register("SESSION_UNAME");		$SESSION_UNAME = $user;	header("Location: admin.php");	exit();	}else{	//echo"Você está tentado acessar uma página restrita !";	header("Location: logar.php");	exit();	}}else{	header("Location: logar.php");	exit();}function authenticate($theuser, $thepass)	{include("config.php");	$query = "SELECT id from admin WHERE login_usr = '$theuser' AND senha_usr = PASSWORD('$thepass')";	mysql_select_db(banco) or die("Unable to select database!");	$result = mysql_query($query, $conec) or die ("Error in query: $query. " . mysql_error());	if (mysql_num_rows($result) == 1) {		return 1;	}	else	{		return 0;	}}?>
ve se da certo...

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Fabyo disse:

Nao use session_register(), essa função esta obsoleta e insegura

Eu costumo usar $_SESSION["usuario"], mas sinceramente não sei se é a maneira mais adequada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta certo, para usar session_register(), session_is_registered() e session_unregister() a register_globals precisa estar em on, mas por segurança ele esta em off desda versao 4.2.x

Compartilhar este post


Link para o post
Compartilhar em outros sites

session_register(): $_SESSION["usuario"] = "ignorante"session_is_register(): isset($_SESSION["usuario"])session_unregister(): $_SESSION["usuario"] = nullé isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites
  tmferreira disse:

Podemos utilizar esse ou esse: http://forum.imasters.com.br/index.php?showtopic=147566

 

Se formos utilizar esse, vamos fazer algumas alterações:

function authenticate($theuser, $thepass)	{include("config.php");	$query = "SELECT id from usuarios WHERE login_usr = '$theuser' AND senha_usr = md5('$thepass')";	mysql_select_db(banco) or die("Unable to select database!");	$result = mysql_query($query, $conec) or die ("Error in query: $query. " . mysql_error());	if (mysql_num_rows($result) == 1) {		$row = mysql_fetch_row($result);		return $row[0];	}	else	{		return false;	}}
if ($status)	{	session_start();	$_SESSION['id'] = $status;	header("Location: admin.php");	exit();	}else{	//echo"Você está tentado acessar uma página restrita !";	header("Location: logar.php");	exit();	}}else{	header("Location: logar.php");	exit();}
A partir de agora, vou instruindo e você fazendo ok?
OU tmferreira você nao vai utilizar esta parte:

 

if (isset($txuser)){

$user = $txuser;

$pass = $txpass;

 

$status = authenticate($user, $pass);

 

que vem do formulario onde pede o usuário e a senha?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  tmferreira disse:

hernan, leia mais atentamente meu post. Iremos fazer algumas alterações. O resto continua.

OK desculpe por nao prestar atenção.

 

OK. fiz desse jeito que você falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

function nivel($id){include ("config.php");	$sql = "SELECT nivel_usr from usuarios where id = $id";	 mysql_select_db(banco) or die("Impossivel selecionar uma base de dados, favor contatar o administrador!");	$result = mysql_query($sql) or die ("Error in query: $query. " . mysql_error());if (mysql_num_rows($result) == 1) {		$row = mysql_fetch_row($result);		return $row[0];	}	else	{		return false;	}}

 

Seria esta a função??? ve se esta correta.

 

Grato pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites
  tmferreira disse:

Modificando...

function nivel($id){	require_once("config.php");	$sql = "SELECT nivel_usr from usuarios where id = '" . $id . "'";	 mysql_select_db(banco) or die("Impossivel selecionar uma base de dados, favor contatar o administrador!");	 $result = mysql_query($sql) or die ("Error in query: $query. " . mysql_error());	 if (mysql_num_rows($result) == 1) {		$row = mysql_fetch_row($result);		return $row[0];	}	else	{		return false;	}}
Agora vamos utilizar uma classe para conexão com o BD. Crie uma ou pegue uma do seu gosto no Laboratório de Scripts.É importante que se abra o BD, faça a query e o feche. Não tem necessidade de ficar aberto.Dependendo da versão do seu PHP, podemos usar a classe de conexão com o MySQLi, do Fabyo.
Desculpa tmferreira, mas nao entende nada de classe de conexao e vi a do Fabyo, mas nao entendi nada do que la ta escrito, gostaria de entender melhor e saber pra que é precisso uma classe de conexao...Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, despois no fim nos podemos melhorar ele, concordo com você plenamente.Bom, ja fiz isso que você me falou, ja criei o funcoes.php, outra aquela função que criei para verificar o nível do usuário que vem do form login. onde vou colocar ela?Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

tava olhando o codigo que vcs estão passando pra o herman e notei que apos fazer uma conexão ao DB logo apos fazer a consulta fas a desconexão.A pergunta é:o que mudaria desconectar do db?se ficar conectando e desconectando toda vez que for ter um acesso ao DB, tornaria o servidor mais lento?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples voce usando a conexao somente na hora que for usar e fechando em seguida, voce na verdade deixa o acesso ao banco muito mais tempo livre, imaginando um sistema de muitos usuarios conectados evitaria estouros de limites de conexao, o banco de dados tem que ficar fechado sempre, e só abre na hora de usar e outros detalhes mechendo no proprio sistema é fazer conexoes, e selects bem utilizados por exemplo usando POSTBACK, evitando assim conectar no banco varias vezes sem necessidade, por exemplo você monta um combobox com dados de um banco, mas nao precisa toda hora que der F5 conectar no banco e refazer a conexao montando o combo toda hora, você pode fazer isso somente a primeira visita na pagina o resto ele salvaria e manteria as informações

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.