Ir para conteúdo
Fórum Script Brasil
  • 0

privilegios diferentes


tonzinhu

Pergunta

Iae galera beleza,

estou criando um sistema aonde dependendo do usuario ele só tem direito a ver os menus da area dele.

Ex:

Admin -> Acesso total

Marketing -> Acesso somente aos menus (add./rem. propaganda)

Ou seja, se o usuario = marketing ele lista os itens do menu de acordo com o usuario. Porem um usuario pode ter tambem outros niveis diferentes.

Acho que deu pra entender.

alguém poderia me dar uma "luz" de como fazer isso de um modo mais simples.

O meu esquema que pensei seria:

tabela_usuarios

iduser | login | senha

tabela_menu

idmenu

tabela_acesso_menu

idacesso | iduser | idmenu

ate ai tudo bem, lista normal, mas se algum usuario mais avançado digitar por exemplo no browser:

ele tem acesso somente a pagina de marketing.php, mas se digitar produtos.php que ele não teria acesso no browser ele navega pela pagina normalmente.

Queria uma ajuda nessa parte, pra impedir que eles vejam as outras pagina.

Ps: uso sistema de login com session.

vlw galera

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Kara , inclua um controle por sessão, e grave na sessao o privilegio do usuario, ai em cada pagina voce ferifica o privilegio, se tiver ok abre a pagina, caso contrario redireciona para tela de login.

Link para o comentário
Compartilhar em outros sites

  • 0

Qd cadastrar um usuário informe qual a permissão ... Na hora q ele se logar você pega a permissão dele cadastrada no banco com uma $_SESSION['perm'] ... no topo das páginas você verifica exemplo

nas páginas q só o admin pode acessar

if ($_SESSION['perm'] == 'admin') {


acessa a página

}else{
echo "Você não tem permissão para está página" 

}

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Olha só... Eu vou dar uma ótima dica para estudos de controle por listas e árvores de acesso.

Zend_Acl e Zend_Auth

http://framework.zend.com/manual/en/zend.acl.html

http://framework.zend.com/manual/en/zend.auth.html

Link para o comentário
Compartilhar em outros sites

  • 0

bem bom porém meu php ainda não é tão avançado, entendi pouca coisa, ainda mais porque ta em ingles o site.

E com session ia ser um pouco mais compliado porque vai ter um formulario para cadastro dos usuarios e nele eu especifico as areas de acesso desse usuario, ou seja, uns podem acessa areas do admin, outros não, eu consegui montar um "embromation"

Arquivo valida_menu.php

<?php

$menu = $_GET['view'];

//pegando menu
$menu = mysql_query("SELECT * FROM menu WHERE menu='$menu'");
$l[cat] = mysql_fetch_assoc($menu);

$cat = $l[cat]['idmenu'];

//verificando se o usuario pode acessar
$acesso[menu] = mysql_query("SELECT * FROM privilegios WHERE idmenu='$cat'");
$l[acesso] = mysql_fetch_assoc($acesso[menu]);
$iduser[acesso] = $l[acesso]['idusuario'];

//id usuario atual
$id[user] = $_SESSION['idusuario'];


if($_SESSION['usuario'] == 'admin'){
    
    
}
else{
    if($id[user] != $iduser[acesso]){
    print 'você não tem permissão para vizualizar esta página!';
    echo "<script language='javascript'>";
    echo "document.location.href = 'java script:history.go(-1);'";
    echo "</script>";
}
else{
    
}
}



?>

e nas paginas adiciono um require(valida_menu.php);

Até agora está funcionando, mas ainda estou fazendo uns testes.

Se alguém souber outras maneiras avisa ai.

vlw

Link para o comentário
Compartilhar em outros sites

  • 0

Se procurares no google vais ver que existem traduções desse manual supracitado.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

já consegui fazer um esquema, foi até simples:

essa parte exibe os menus de acordo com o usuario:

$id[usuario] = $_SESSION['idusuario'];

if($_SESSION['usuario'] == "admin"){
    

    
    $menu = mysql_query("SELECT * FROM menu ORDER By idmenu");
    while($l[menu] = mysql_fetch_assoc($menu)){
    print '<li><a href="painel.php?view='.$l[menu]['menu'].'">'.$l[menu]['menu'].'</a></li>';
    }
    
}
else{

//pegando idmenu privilegios
$acesso[user] = mysql_query("SELECT * FROM privilegios WHERE idusuario='$id[usuario]'");

while($l[acesso] = mysql_fetch_assoc($acesso[user])){
    $idmenu = $l[acesso]['idmenu'];
    
    if($idmenu == ""){
        
    }
    else{
    //pegando menu do banco
    $menu = mysql_query("SELECT * FROM menu WHERE idmenu='$idmenu' ORDER By idmenu");
    $l[menu] = mysql_fetch_assoc($menu);
    
print '<li><a href="painel.php?view='.$l[menu]['menu'].'">'.$l[menu]['menu'].'</a></li>';
    }
}
}
e na páginas coloquei um arquivo valida.menu.php para impedir que o usuario tente acessar a pagina sem que ele tenha privilegios:
$menu = $_GET['view'];

$query = 'mysql_query';

//buscando id categoria
$id[menu] = $query("SELECT * FROM menu WHERE menu ='$menu'");
$linhas = mysql_fetch_assoc($id[menu]);

//id categoria atual
$idmenu = $linhas['idmenu'];

$id[user] = $_SESSION['idusuario'];
######################################################
$priv = $query("SELECT idmenu FROM privilegios WHERE idusuario='$id[user]' AND idmenu='$idmenu'");

//id usuario atual

$linhas[priv] = mysql_fetch_assoc($priv);
if($_SESSION['usuario'] == "admin"){
    
}
else{
if(mysql_num_rows($priv)<=0){
    echo "<script language='javascript'>";
    echo "alert('Você não tem permissão para exibir esta página.');";
    echo "document.location.href = 'java script:history.go(-1);'";
    echo "</script>";
}
else{
    
}
}

se ele não puder ver a pagina exibe um alerta e volta pra pagina anterior.

Ainda estou testando mas até agora funcionou bem, sem nenhum problema.

Vlw ai pelos helps. e se alguém tiver sugestões para melhorar....

Link para o comentário
Compartilhar em outros sites

  • 0

Eu faria assim, colocaria um campo da tabela_usuarios no Mysql "permicao".

Na hora do select do menu, se o usuario q logou tem a "permicao" 1, ele é Admin , se tiver a "permicao" 2 ele é Marketing.

if($permicao=='1'){

include "menuAdmin.php";

}

if($permicao=='2'){

include "menuMarketing.php";

}

e tipo, pra proteger o acesso as paginas, você pode fazer para quando você logar, as paginas fazerem o SELECT de acordo com a permição saka?

Link para o comentário
Compartilhar em outros sites

  • 0

porem dessa forma não ia ficar muito dinamico, pois o sistema cria categorias e os usuarios acessam as categorias que eu permitir.

ou seja, posso criar 100 categorias (marketing, gerencia, informatica, etc....)

e na hora de cadastrar os usuarios eu seleciono as que ele pode acessar.

Mas a logica que usei foi essa mesma dai, pois quando se add. a categoria, tambem upa o arquivos dakela pagina(link),

e depois do um include pra exibir elas.

E a permissão é dessa forma mesmo, na hora que loga ele verifica os acessos que tem direito, masss..

e se por acaso ele fosse lá e digitasse uma página que não está listada pra ele? , ai entra a validação do menu, que não deixa ele acessar.

Mas podem ir dando idéias, que alias servirá para todos.

vlw aew

Link para o comentário
Compartilhar em outros sites

  • 0

O meio mais simples... cadastra as categorias no sistema, quando você for cadastrar o usuário adiciona as categorias à que ele está vinculado, quando o cara fizer login você pega essas categorias e guarda num array, cada lugar que ele for você verifica com o in_array se no array do usuário está a categoria que ele quer ver, pronto. Claro que você teria que ter a parte de edição do usuário para atribuir ou remover categorias a que ele teria direito de ter acesso, mas isso é simples...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...