Ir para conteúdo

POWERED BY:

Arquivado

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

Thiago Moreira

Sistema de nivel de acesso à páginas

Recommended Posts

Olá pessoal,

 

Estou fazendo um sistema de controle interno para minha empresa e preciso fazer um controle de acesso dos usuários. Preciso atribuir 3 niveis de acesso:

 

1 - Visualizar, Editar e apagar;

2 - Visualizar e Editar;

3 - Visualizar.

 

Gostaria de saber uma melhor forma de fazer este sistema, que seja simples. Sei que pode fazer com Array, mas ainda não consegui ter a visão de como seria.

 

Poderiam me ajudar? :$

 

 

Forte abraço a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Thiago,

 

Você pode criar um campo numérico - int - de forma a armazenar a permissão de acesso dos usuários:

 

0 - não acessa

1 - Visualizar, Editar e apagar;

2 - Visualizar e Editar;

3 - Visualizar.

 

Dessa forma, você fica livre para incluir outras permissões que possam ser necessárias no futuro.

 

Eu costumo atrelar esse campo a um ID e criar uma tabela de permissões, dessa forma simplifica as alterações no futuro, pois fica claro o que significa cada tipo de permissão.

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Thiago,

 

Você pode criar um campo numérico - int - de forma a armazenar a permissão de acesso dos usuários:

 

0 - não acessa

1 - Visualizar, Editar e apagar;

2 - Visualizar e Editar;

3 - Visualizar.

 

Dessa forma, você fica livre para incluir outras permissões que possam ser necessárias no futuro.

 

Eu costumo atrelar esse campo a um ID e criar uma tabela de permissões, dessa forma simplifica as alterações no futuro, pois fica claro o que significa cada tipo de permissão.

 

[]´s

É, eu ja tinha feito um campo com 'int' para controlar a permissao, mas o que eu kero é a validação no PHP. Que função eu posso escrever para fazer este tipo de verificação e dar acesso aos usuários à suas respectivas páginas? Esta é minha dúvida.

 

Se puder me ajudar, agradeço :D

 

 

Abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

pegando a duvida do nosso amigo ai, eu fiz um sistema por niveis, parecido com o que ele quer:

0 - vizualizar

1 - vizualizar e editar

2 - vizualizar,editar e apagar

 

agora no meu caso eu criei uma pagina diferente pra cada nivel, tem como fazer uma pagina soh e restringir o acesso a determinada funcao por exemplo ?? vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

pegando a duvida do nosso amigo ai, eu fiz um sistema por niveis, parecido com o que ele quer:

0 - vizualizar

1 - vizualizar e editar

2 - vizualizar,editar e apagar

 

agora no meu caso eu criei uma pagina diferente pra cada nivel, tem como fazer uma pagina soh e restringir o acesso a determinada funcao por exemplo ?? vlw

 

Pois é meu camarada. Eu ja consegui fazer, anteriormente, com $_GET, como o nosso amigo cassiano óliver sugeriu, mas eu keria fazer algo mais profissional, com menos código.

 

Pegue essa ideia do Cassiano q você vai conseguir.

 

 

Se alguem puder me ajudar, agradeço. :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso use a passagem do nível de acesso pela url, é altamente recomendável que você criptografe as mesmas.

Imagina um user malicioso, altera o valor da variável na url.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é meu camarada. Eu ja consegui fazer, anteriormente, com $_GET, como o nosso amigo cassiano óliver sugeriu, mas eu keria fazer algo mais profissional, com menos código.

Thiago, como seria essa forma mais profissional e com menos código(isso muito me interessa ahahah)?

 

Eu nunca fiz esse tipo de sistema, em níveis...

mas um dia posso precisar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

williamhrs,

 

poderia me ajudar a fazer estes níveis com session? Sou muito iniciante ainda e não tenho dominio legal do PHP. Se puder, agradeceria muito.

 

 

 

cassiano óliver,

 

Eu vi uma vez um camarada ensinando a fazer esse sistema de niveis usando Array, se eu não me engano, foi aki no forum mesmo, só que eu não achei o post denovo :S

 

Eu fiz uma vez da seguinte forma:

 

Fiz uma consulta no campo nivel do mysql e comecei a fazer varias comparações com if. porém, dessa vez, eu queria fazer um script mais profissional. Acredito que, se nosso amigo williamhrs puder nos ajudar, seria um script profissional.

 

 

 

Se puderem me ajudar, agradeço :D

 

Abração a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

dae galera eu faço assim...

 

0 - sem acesso

1 - visualiza

2 - visualiza/ altera

3 - visualiza / adiciona

4 - visualiza / adiciona / altera

5 - visualiza / adiciona / altera / exclui

 

uma tabela para os sistemas

uma tabela para as permissoes

uma tabela para os usuarios

 

eu criei uma classe para o usuario para resolver todos os problema...

 

não aconselho a fazer por get, se for fazer usa os hash para encriptar a string toda...

 

via session é como eu uso...

 

eu apenas armazeno o nome do usuario e quando ele acessa um sistema mando verificar o nivel de acesso para aquele sistema e executa a operação

 

você. pode fazer uma função que recupera os dados, colocar ela em um include...

 

exemplo, algo +/- assim

PHP
<?php

include("funcoes.php");

 

$cod_user = $_SESSION["COD_USER"];

$sistema = "NOTICIAS";

 

$nivel = UserNivel($cod_user, $sistema);

 

 

if ($nive == X ) { // faça

 

 

 

} else { // se não

 

header("Location: acessonegado.html");

 

}

 

?>

 

a funcao é simples de fazer, soh fazer o select com a sua base de dados e retornar o valor

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Danilo ramos começou muito bem a historia... Eu fiz tb um sistema desse, mais simples, porem tão eficiente quanto. O Ideal é vcs darem uma estudade em session. Vou explicar por alto como a session funciona(pelo menos oq eu entendi e deu certo):

 

você tem dois $_POST de login e senha (o formulario de login basico);

 

no meu caso eu envio pra um script de acesso:

 

login.php

PHP
//obtem os valores -  Login e Senha

$login = $_POST["login"];

$senha = $_POST["senha"];

 

//acessa ao banco de dados

require('cn.php');

 

//Verifica login junto ao banco de dados

$resultado = mysql_query("SELECT * FROM login WHERE login = '$login'");

$linhas = mysql_num_rows($resultado);

 

if ($linhas ==0)  //testa se a consulta retornou algum registro

{

 

//Se nao retornar nem um resultado ele volta pra pagina de login

header("Location: login.php?login=negado");

 

} else {

 

//Login confirmado, confirmando senha

    if ($senha != mysql_result($resultado, 0, "senha"))//confere a senha

    {

     

       //Senha errado = volta pra pagina de login

       header("Location: login.php?login=negado");

 

    }else{

       

       //usuario correto.. vamos criar os cookies com sessions. Aqui eu acesso o banco de dados e pego o nome do login utilizado e o grupo

        $buscanome = mysql_query("SELECT * FROM login WHERE login = '$login'");

        $pega_dados = mysql_fetch_assoc($buscanome);

        $nome = $pega_dados['nome'];

        $icod_user = $pega_dados['cod_user'];

 

    session_start();       //nunca esqueça de por isso antes de usar session

    $_SESSION["login_usuario"] = $login;

    $_SESSION["senha_usuario"] = $senha;

    $_SESSION["nome_user"] = $nome;     

    $_SESSION["cod_user"] = $id_user;

       

    // redireciona par a pagina principal

    header("Location: index.php");

    }

}

mysql_close($cn);

 

 

 

Certo, nesse login a gente conseguiu abrir sessão com todos os dados que precisamos, login, senha, nome e codigo para restrição.

Mas para deixarmos tudo validado e sempre funcionando temos que colocar restrição em todas as páginas. Pra isso faça um require('valida_session.php'). Arquivo de validação:

 

valida_session.php

PHP
//Verifica se existe a session login e senha, pois se existe valores nessas variaveis quer dizer que o login foi feito

     session_start();

 

if (isset($_SESSION["login_usuario"]) AND isset($_SESSION["senha_usuario"])) {

 

     //Se existe login e senha, fazemos a declaração das variaveis

    $login_usuario = $_SESSION["login_usuario"];

    $senha_usuario = $_SESSION["senha_usuario"];

    $nome_user = $_SESSION["nome_user"];

    $cod_user = $_SESSION["cod_user"];

 

    //A qualquer momento no documento se voce der echo alguma dessas variaveis você tera o valor que deseja. Isso eh session gente...

 

//acessa ao banco de dados

require('cn.php');

 

}else{

 

//caso nao tinha session.. quer dizer.. ele nao logou, volta pra pag de login

header("Location: login.php");

 

exit();

} /*aqui primeiro ele checa para ver se exite essas Sessoes, e depois ele coloca o valor das sessoes nessas variaveis... para fazermos os testes!*/

 

//Caso a session de login ou senha nao esteja vazia ele da uma verifica pra confirmar login e senha novamente... se tiver errado algum dado, ele apaga todas as sessions criadas anteriormente...

 

if(!(empty($login_usuario) OR empty($senha_usuario)))

{

 

$resultado = mysql_query("SELECT * FROM login WHERE login = '$login_usuario'");

if (mysql_num_rows($resultado) == 1)/*caso exista esse login.. vamos testar a senha entao*/

{

   if ($senha_usuario != mysql_result($resultado, 0, "senha"))

   {

       unset ($_SESSION["nome_usuario"]);/*apaga a session que existia mas era errada..*/

       unset ($_SESSION["sehna_usuario"]);

       unset ($_SESSION["nome_user"]);

       unset ($_SESSION["cod_user"]);

       header("Location: identifica.php?login=negado");

       exit();

   }

}else {

       unset ($_SESSION["nome_usuario"]);

       unset ($_SESSION["sehna_usuario"]);

       unset ($_SESSION["nome_user"]);

       unset ($_SESSION["cod_user"]);

       header("Location: identifica.php?login=negado");

       exit();

}

 

}else{

header("Location: login.php");

}

mysql_close($cn);

 

 

Ok... no topo de cada página você faz o requerimento dessa valida_session.php e o sistema está basicamente seguro contra quem não fizer o login.

 

Vamos agora a parte dos links. Como sugerido acima temos a tabela de permisões. Oq podemos fazer é assim. Nessa tabela temos o campo codigo e URL´s.

 

Exemplo:

 

Cod = 1 URL = Visualizar, Editar, Apagar, Adicionar

Cod = 2 URL = Visualizar, Editar, Apagar

Cod = 3 URL = Visualizar, Editar

Cod = 4 URL = Visualizar

 

certo. então cada user tem seu codigo já. Ai na no hora de puxar o link você puxa mais ou menos assim

 

SELECT * FROM tabela_permisoes WHERE cod = $cod_user

 

echo $URL

 

Pronto... temos ai para cada nivel um link diferente.... Acho q deu pra entender né?! Duvidas... posta ai... falous!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Danilo ramos começou muito bem a historia... Eu fiz tb um sistema desse, mais simples, porem tão eficiente quanto. O Ideal é vcs darem uma estudade em session. Vou explicar por alto como a session funciona(pelo menos oq eu entendi e deu certo):

 

você tem dois $_POST de login e senha (o formulario de login basico);

 

no meu caso eu envio pra um script de acesso:

 

login.php

PHP
//obtem os valores -  Login e Senha

$login = $_POST["login"];

$senha = $_POST["senha"];

 

//acessa ao banco de dados

require('cn.php');

 

//Verifica login junto ao banco de dados

$resultado = mysql_query("SELECT * FROM login WHERE login = '$login'");

$linhas = mysql_num_rows($resultado);

 

if ($linhas ==0)  //testa se a consulta retornou algum registro

{

 

//Se nao retornar nem um resultado ele volta pra pagina de login

header("Location: login.php?login=negado");

 

} else {

 

//Login confirmado, confirmando senha

    if ($senha != mysql_result($resultado, 0, "senha"))//confere a senha

    {

     

       //Senha errado = volta pra pagina de login

       header("Location: login.php?login=negado");

 

    }else{

       

       //usuario correto.. vamos criar os cookies com sessions. Aqui eu acesso o banco de dados e pego o nome do login utilizado e o grupo

        $buscanome = mysql_query("SELECT * FROM login WHERE login = '$login'");

        $pega_dados = mysql_fetch_assoc($buscanome);

        $nome = $pega_dados['nome'];

        $icod_user = $pega_dados['cod_user'];

 

    session_start();       //nunca esqueça de por isso antes de usar session

    $_SESSION["login_usuario"] = $login;

    $_SESSION["senha_usuario"] = $senha;

    $_SESSION["nome_user"] = $nome;    

    $_SESSION["cod_user"] = $id_user;

       

    // redireciona par a pagina principal

    header("Location: index.php");

    }

}

mysql_close($cn);

 

 

 

Certo, nesse login a gente conseguiu abrir sessão com todos os dados que precisamos, login, senha, nome e codigo para restrição.

Mas para deixarmos tudo validado e sempre funcionando temos que colocar restrição em todas as páginas. Pra isso faça um require('valida_session.php'). Arquivo de validação:

 

valida_session.php

PHP
//Verifica se existe a session login e senha, pois se existe valores nessas variaveis quer dizer que o login foi feito

     session_start();

 

if (isset($_SESSION["login_usuario"]) AND isset($_SESSION["senha_usuario"])) {

 

     //Se existe login e senha, fazemos a declaração das variaveis

    $login_usuario = $_SESSION["login_usuario"];

    $senha_usuario = $_SESSION["senha_usuario"];

    $nome_user = $_SESSION["nome_user"];

    $cod_user = $_SESSION["cod_user"];

 

    //A qualquer momento no documento se voce der echo alguma dessas variaveis você tera o valor que deseja. Isso eh session gente...

 

//acessa ao banco de dados

require('cn.php');

 

}else{

 

//caso nao tinha session.. quer dizer.. ele nao logou, volta pra pag de login

header("Location: login.php");

 

exit();

} /*aqui primeiro ele checa para ver se exite essas Sessoes, e depois ele coloca o valor das sessoes nessas variaveis... para fazermos os testes!*/

 

//Caso a session de login ou senha nao esteja vazia ele da uma verifica pra confirmar login e senha novamente... se tiver errado algum dado, ele apaga todas as sessions criadas anteriormente...

 

if(!(empty($login_usuario) OR empty($senha_usuario)))

{

 

$resultado = mysql_query("SELECT * FROM login WHERE login = '$login_usuario'");

if (mysql_num_rows($resultado) == 1)/*caso exista esse login.. vamos testar a senha entao*/

{

   if ($senha_usuario != mysql_result($resultado, 0, "senha"))

   {

       unset ($_SESSION["nome_usuario"]);/*apaga a session que existia mas era errada..*/

       unset ($_SESSION["sehna_usuario"]);

       unset ($_SESSION["nome_user"]);

       unset ($_SESSION["cod_user"]);

       header("Location: identifica.php?login=negado");

       exit();

   }

}else {

       unset ($_SESSION["nome_usuario"]);

       unset ($_SESSION["sehna_usuario"]);

       unset ($_SESSION["nome_user"]);

       unset ($_SESSION["cod_user"]);

       header("Location: identifica.php?login=negado");

       exit();

}

 

}else{

header("Location: login.php");

}

mysql_close($cn);

 

 

Ok... no topo de cada página você faz o requerimento dessa valida_session.php e o sistema está basicamente seguro contra quem não fizer o login.

 

Vamos agora a parte dos links. Como sugerido acima temos a tabela de permisões. Oq podemos fazer é assim. Nessa tabela temos o campo codigo e URL´s.

 

Exemplo:

 

Cod = 1 URL = Visualizar, Editar, Apagar, Adicionar

Cod = 2 URL = Visualizar, Editar, Apagar

Cod = 3 URL = Visualizar, Editar

Cod = 4 URL = Visualizar

 

certo. então cada user tem seu codigo já. Ai na no hora de puxar o link você puxa mais ou menos assim

 

SELECT * FROM tabela_permisoes WHERE cod = $cod_user

 

echo $URL

 

Pronto... temos ai para cada nivel um link diferente.... Acho q deu pra entender né?! Duvidas... posta ai... falous!!

 

Rodrigo Tschope,

 

Show de bola seu script. Isso que eu tava kerendo, algo seguro e profissional. Gostei. Ainda não testei, mas vou testá-lo em breve.

 

Agradeço a ajuda de todos.

 

 

Abração

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.