Fr4nc0w 1 Denunciar post Postado Julho 22, 2009 Dae galera beleza? então, eu certa vez trabalhei num local onde o sistema de privilégios era bem legal, em php e baseado no conceito correto de privilégio, você dava todas as informações necessárias para a pessoa acessar certa parte do sistema, bem parecido com o sistema do linux, de leitura, escrita, ou soh leitura e sem escrita e por ai vai. vocês saberiam me ajudar a encontrar algo nesse genero para eu aprender em implantar? ou até mesmo me explicar como funciona o conceito para eu aplicar? Estou fazendo um sistema orientado a objetos em PHP e agora preciso definir niveis de usuários. vlw e flw ! Compartilhar este post Link para o post Compartilhar em outros sites
Eliseu M. 2 Denunciar post Postado Julho 22, 2009 Olha, há vários tópicos de fóruns no Google, principalmente um do iMasters, que aparece em primeiro: http://forum.imasters.com.br/index.php?/topic/354533-sistema-de-login-com-grupos/page__pid__1341806__st__0entry1341806 Outro: http://www.htmlstaff.org/ver.php?id=20536 Até mais! // O conceito é simples: Na tabela, você cria mais uma row, por exemplo: nivel Daí você imagina quatro níveis: 1, 2, 3 e 4 Daí na página, você removeria alguns itens, como menus, se o nivel fosse menor que 4. Sacou? Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Julho 22, 2009 Deverá fazer uma tabela a parte, ou uma noca coluna dentro da tabela de usuários, exemplo do campo: campo tipo SET 1,2,3,4,5,6 como o Eliseu disse acima, nas páginas você faz a verificação de cada um ao logar... usarás muito o condicional IF. se determinada página só pode ser acessada por usuários de nível 6, um exemplo, bastaria adicionar a query a regra: mysql_query("SELECT login,senha FROM tabela WHERE nivel=6"); também seria interessante criar um controle dos usuários ativos e inativos. Ótimo alaerte, mais como ? Criando mais um campo na tabela com o nome status tipo ENUM valor padrão '1','2' na query, para que somente os usuários desbloqueados e de nível 6 tivessem acesso, fariamos: mysql_query("SELECT login,senha FROM tabela WHERE status = 1 AND nivel=6"); É bastante simples, é só entender a lógica da coisa. Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Julho 23, 2009 Dae galera beleza? então, eu certa vez trabalhei num local onde o sistema de privilégios era bem legal, em php e baseado no conceito correto de privilégio, você dava todas as informações necessárias para a pessoa acessar certa parte do sistema, bem parecido com o sistema do linux, de leitura, escrita, ou soh leitura e sem escrita e por ai vai. vocês saberiam me ajudar a encontrar algo nesse genero para eu aprender em implantar? ou até mesmo me explicar como funciona o conceito para eu aplicar? Estou fazendo um sistema orientado a objetos em PHP e agora preciso definir niveis de usuários. Bom amigo, se você está começando a pensar nos níveis de usuários então uma boa pegada pode ser o conceito utilizado pelo ambiente ...nix. A idéia é utilizar operação bit-a-bit para determinar se um usuário possui ou não acesso à um determinado recurso. Imagina o seguinte: Você tem um cadastro de grupos: mysql> create table grupos ( -> `gid` mediumint(8) unsigned not null auto_increment, -> `nome` varchar(20) not null, -> primary key(`gid`) -> ) engine=MyISAM; Query OK, 0 rows affected (0.00 sec) E um cadastro de usuários: mysql> create table usuarios ( -> `uid` mediumint(8) unsigned not null auto_increment, -> `gid` mediumint(8) unsigned not null, -> `nome` varchar(50) not null, -> `senha` varchar(10) not null, -> primary key(`uid`,`gid`), -> key `grupos`(`gid`), -> key `login`(`nome`,`senha`) -> ) engine=MyISAM; Query OK, 0 rows affected (0.00 sec) Primeiro criamos um grupo de administradores e um de usuários: mysql> insert into grupos(`nome`) values('administrador'),('usuarios'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 Agora criamos dois usuários: mysql> insert into usuarios(`gid`,`nome`,`senha`) values(1,'Neto','123'),(2,'Joao','456'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select u.uid,u.gid,concat(u.nome,':',g.nome) 'usuario' from usuarios u left join grupos g on g.gid = u.gid where u.nome = 'Neto' and u.senha='123'; +-----+-----+--------------------+ | uid | gid | usuario | +-----+-----+--------------------+ | 1 | 1 | Neto:administrador | +-----+-----+--------------------+ 1 row in set (0.00 sec) Certo, agora que temos um usuário e um grupo criamos uma tabela onde teremos as informações das páginas: mysql> create table `paginas` ( -> `id` mediumint(8) unsigned not null auto_increment, -> `nome` varchar(20) not null, -> `dono` mediumint(8) unsigned not null, -> `grupo` mediumint(8) unsigned not null, -> `conteudo` mediumint(8) unsigned not null, -> `permissao` smallint(3) unsigned not null default 511, -> primary key(`id`), -> key `dono`(`dono`,`grupo`), -> key `conteudo`(`conteudo`) -> ) engine=MyISAM; Query OK, 0 rows affected (0.01 sec) Em permissão, definimos o decimal 511 como permissão padrão, isso significa que qualquer usuário de qualquer grupo terá acesso total ao conteúdo. As permissões serão: Dono leitura -> 0x0100 edição -> 0x0080 adição e deleção -> 0x0040 Grupo leitura -> 0x0020 edição -> 0x0010 adição e deleção -> 0x0008 Outros leitura -> 0x0004 edição -> 0x0002 adição e deleção -> 0x0001 Um pouco de matemática: Vamos supor que queremos definir permissão de leitura, edição e adição/deleção para o dono e para o grupo, porém os outros poderão apenas ler o conteúdo: P = ( 0x0100 | 0x0080 | 0x0040 ) | ( 0x0020 | 0x0010 | 0x0008 ) | 0x0004 P = 0x01C0 | 0x0038 | 0x0004 P = 0x01FC Em binário: +---------------------+ | 100000000 -> 0x0100 | | 010000000 -> 0x0080 | | 001000000 -> 0x0040 | | 000100000 -> 0x0020 | | 000010000 -> 0x0010 | | 000001000 -> 0x0008 | | 000000100 -> 0x0004 | +---------------------+ | 111111100 -> 0x01FC | +---------------------+ Convertendo 1FC para octal: +----+----+----+ | 1 | F | C | -> Hexadecimal +----+----+----+ |0001|1111|1100| -> Binário +----+----+----+ +---+---+---+---+ |000|111|111|100| -> Binário +---+---+---+---+ | 0 | 7 | 7 | 4 | -> Octal +---+---+---+---+ E octal para decimal: D = ( 7 X 8² ) + ( 7 X 8¹ ) + ( 4 X 8° ) = ( 7 X 64 ) + ( 7 X 8 ) + ( 4 X 1 ) = 448 + 56 + 4 D = 508 Bom, agora a operação inversa, imagine que um usuário anônimo acaba de acessar sua aplicação, como saber se ele terá acesso a um determinado recurso ? Vamos supor que a permissão desse recurso seja 774, como o usuário anônimo não faz parte nem do grupo nem é o dono então vamos usar outros +---------+---------+---------+ | leitura | edição |inclusão | +---------+---------+---------+ |111111100|111111100|111111100| |000000100|000000010|000000001| +---------+---------+---------+ |000000100|000000000|000000000| +---------+---------+---------+ |permitido|negado |negado | +---------+---------+---------+ Agora fazendo alguns testes no MySQL: mysql> insert into paginas(`nome`,`dono`,`grupo`,`conteudo`,`permissao`) values( "Teste",1,1,1,0x1FC); Query OK, 1 row affected (0.00 sec) mysql> select -> permissao & 0x4 "leitura",permissao & 0x2 "edicao",permissao & 0x1 "adicao/delecao" from paginas; +---------+--------+----------------+ | leitura | edicao | adicao/delecao | +---------+--------+----------------+ | 4 | 0 | 0 | +---------+--------+----------------+ 1 row in set (0.00 sec) Ou seja, o usuário pode apenas ler o conteúdo da página. Vendo todas as permissões da página: mysql> select concat( -> if( permissao & 0x0100 , "l" , "-" ), -> if( permissao & 0x0080 , "e" , "-" ), -> if( permissao & 0x0040 , "d" , "-" ) ) "Dono", -> concat( -> if( permissao & 0x0020 , "l" , "-" ), -> if( permissao & 0x0010 , "e" , "-" ), -> if( permissao & 0x0008 , "d" , "-" ) ) "Grupo", -> concat( -> if( permissao & 0x0004 , "l" , "-" ), -> if( permissao & 0x0002 , "e" , "-" ), -> if( permissao & 0x0001 , "d" , "-" ) ) "Outros" -> from paginas; +------+-------+--------+ | Dono | Grupo | Outros | +------+-------+--------+ | led | led | l-- | +------+-------+--------+ 1 row in set (0.00 sec) Utilizando esse conceito você consegue determinar qual o tipo de acesso que um usuário pode ter a um determinado recurso e assim, garantir a integridade da sua aplicação. Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Julho 23, 2009 É interessante, mais não é necessário isso tudo, ainda mais para ele que é iniciante. Compartilhar este post Link para o post Compartilhar em outros sites
hao 0 Denunciar post Postado Julho 23, 2009 Putz, isso foi uma verdadeira aula de permissões João! Ótimo mesmo, com certeza vou favoritar. Meus parabéns. []'s Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Julho 23, 2009 É interessante, mais não é necessário isso tudo, ainda mais para ele que é iniciante. Mas é justamente ai que está a beleza desse sistema, ele só parece complicado, mas no fim ele é a forma mais simples de implementar e com apenas 1 consulta você é capaz de saber qual acesso um usuário tem para um determinado recurso, por exemplo: O usuário entrou no sistema usando um formulário de login: mysql> select `uid`,`gid`,`nome` from `usuarios` where ( ( `nome`="Joao" ) AND ( `senha`="456" ) ); +-----+-----+------+ | uid | gid | nome | +-----+-----+------+ | 2 | 2 | Joao | +-----+-----+------+ 1 row in set (0.00 sec) Agora gravamos o uid e o gid em uma sessão no PHP: $user = "Joao"; $pswd = "456"; $qstr = sprintf( 'select `uid`,`gid`,`nome` from `usuarios` where ( ( `nome`="%s" ) AND ( `senha`="%s" ) );' , $user , $pswd ); echo $qstr; if ( ( $res = mysql_query( $qstr ) ) ){ if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) ){ $_SESSION[ "login" ][ "nome" ] = $row[ "nome" ]; $_SESSION[ "login" ][ "uid" ] = $row[ "uid" ]; //2 $_SESSION[ "login" ][ "gid" ] = $row[ "gid" ]; //2 } mysql_free_result( $res ); } Certo, agora que temos o uid e o gid gravados em sessão vamos verificar se esse usuário tem e qual o tipo de acesso que a um recurso: mysql> select -> p.nome "pagina", -> concat(up.nome,":",gp.nome) "proprietario", -> u.nome "usuario", -> g.nome "grupo", -> if( u.uid = up.uid AND u.gid = gp.gid, if( p.permissao & 0x0100 , 1 , if( p.permissao & 0x0020 , 1 , 0 ) ), -> if( u.uid = up.uid , if( p.permissao & 0x0100 , 1 , 0 ), -> if( g.gid = gp.gid , if( p.permissao & 0x0020 , 1 , 0 ), -> if( p.permissao & 0x0004 , 1 , 0 ) ) ) ) "ler", -> if( u.uid = up.uid AND u.gid = gp.gid, if( p.permissao & 0x0080 , 1 , if( p.permissao & 0x0010 , 1 , 0 ) ), -> if( u.uid = up.uid , if( p.permissao & 0x0080 , 1 , 0 ), -> if( g.gid = gp.gid , if( p.permissao & 0x0010 , 1 , 0 ), -> if( p.permissao & 0x0002 , 1 , 0 ) ) ) ) "editar", -> if( u.uid = up.uid AND u.gid = gp.gid, if( p.permissao & 0x0040 , 1 , if( p.permissao & 0x0008 , 1 , 0 ) ), -> if( u.uid = up.uid , if( p.permissao & 0x0040 , 1 , 0 ), -> if( g.gid = gp.gid , if( p.permissao & 0x0008 , 1 , 0 ), -> if( p.permissao & 0x0001 , 1 , 0 ) ) ) ) "excluir" -> from -> paginas p -> join -> usuarios up -> on -> up.uid = p.dono -> left join -> grupos gp -> on -> gp.gid = p.grupo -> left join -> usuarios u -> on -> u.uid = 2 -> left join -> grupos g -> on -> g.gid = u.gid -> where -> p.nome = "Teste"; +--------+--------------------+---------+----------+-----+--------+---------+ | pagina | proprietario | usuario | grupo | ler | editar | excluir | +--------+--------------------+---------+----------+-----+--------+---------+ | Teste | Neto:administrador | Joao | usuarios | 1 | 0 | 0 | +--------+--------------------+---------+----------+-----+--------+---------+ 1 row in set (0.00 sec) Bom, o usuário com uid=2 pode apenas ler a página Teste, porém o usuario com uid=1: mysql> select -> p.nome "pagina", -> concat(up.nome,":",gp.nome) "proprietario", -> u.nome "usuario", -> g.nome "grupo", -> if( u.uid = up.uid AND u.gid = gp.gid, if( p.permissao & 0x0100 , 1 , if( p.permissao & 0x0020 , 1 , 0 ) ), -> if( u.uid = up.uid , if( p.permissao & 0x0100 , 1 , 0 ), -> if( g.gid = gp.gid , if( p.permissao & 0x0020 , 1 , 0 ), -> if( p.permissao & 0x0004 , 1 , 0 ) ) ) ) "ler", -> if( u.uid = up.uid AND u.gid = gp.gid, if( p.permissao & 0x0080 , 1 , if( p.permissao & 0x0010 , 1 , 0 ) ), -> if( u.uid = up.uid , if( p.permissao & 0x0080 , 1 , 0 ), -> if( g.gid = gp.gid , if( p.permissao & 0x0010 , 1 , 0 ), -> if( p.permissao & 0x0002 , 1 , 0 ) ) ) ) "editar", -> if( u.uid = up.uid AND u.gid = gp.gid, if( p.permissao & 0x0040 , 1 , if( p.permissao & 0x0008 , 1 , 0 ) ), -> if( u.uid = up.uid , if( p.permissao & 0x0040 , 1 , 0 ), -> if( g.gid = gp.gid , if( p.permissao & 0x0008 , 1 , 0 ), -> if( p.permissao & 0x0001 , 1 , 0 ) ) ) ) "excluir" -> from -> paginas p -> join -> usuarios up -> on -> up.uid = p.dono -> left join -> grupos gp -> on -> gp.gid = p.grupo -> left join -> usuarios u -> on -> u.uid = 1 -> left join -> grupos g -> on -> g.gid = u.gid -> where -> p.nome = "Teste"; +--------+--------------------+---------+---------------+-----+--------+---------+ | pagina | proprietario | usuario | grupo | ler | editar | excluir | +--------+--------------------+---------+---------------+-----+--------+---------+ | Teste | Neto:administrador | Neto | administrador | 1 | 1 | 1 | +--------+--------------------+---------+---------------+-----+--------+---------+ 1 row in set (0.01 sec) O usuário com uid=1 pode ler, editar e excluir registros da página Teste. É muito simples fazer isso no PHP também, basta pegar o uid que você resgatou quando fez o login e informar a página que você quer acessar: $qstr = <<<SQL select p.nome "pagina", concat(up.nome,":",gp.nome) "proprietario", u.nome "usuario", g.nome "grupo", if( u.uid = up.uid AND u.gid = gp.gid, if( p.permissao & 0x0100 , 1 , if( p.permissao & 0x0020 , 1 , 0 ) ), if( u.uid = up.uid , if( p.permissao & 0x0100 , 1 , 0 ), if( g.gid = gp.gid , if( p.permissao & 0x0020 , 1 , 0 ), if( p.permissao & 0x0004 , 1 , 0 ) ) ) ) "ler", if( u.uid = up.uid AND u.gid = gp.gid, if( p.permissao & 0x0080 , 1 , if( p.permissao & 0x0010 , 1 , 0 ) ), if( u.uid = up.uid , if( p.permissao & 0x0080 , 1 , 0 ), if( g.gid = gp.gid , if( p.permissao & 0x0010 , 1 , 0 ), if( p.permissao & 0x0002 , 1 , 0 ) ) ) ) "editar", if( u.uid = up.uid AND u.gid = gp.gid, if( p.permissao & 0x0040 , 1 , if( p.permissao & 0x0008 , 1 , 0 ) ), if( u.uid = up.uid , if( p.permissao & 0x0040 , 1 , 0 ), if( g.gid = gp.gid , if( p.permissao & 0x0008 , 1 , 0 ), if( p.permissao & 0x0001 , 1 , 0 ) ) ) ) "excluir" from paginas p join usuarios up on up.uid = p.dono left join grupos gp on gp.gid = p.grupo left join usuarios u on u.uid = %d left join grupos g on g.gid = u.gid where p.nome = "%s" SQL; $uid = $_SESSION[ "login" ][ "uid" ]; //2 $pagina = "Teste"; //Aqui é o nome da página que se quer verificar o acesso if ( ( $res = mysql_query( sprintf( $qstr , $uid , $pagina) ) ) ){ if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) ){ $pode = array(); if ( (int) $row[ "ler" ] ) $pode[] = "ler"; if ( (int) $row[ "editar" ] ) $pode[] = "editar"; if ( (int) $row[ "excluir" ] ) $pode[] = "excluir"; printf( "O usuário %s pode %s a página %s" , $row[ "usuario" ] , implode( ", " , $pode ) , $pagina ); } mysql_free_result( $res ); } A saída disso será: O usuário Joao pode ler a página Teste E se trocarmos o uid por 1 a saída será: O usuário Neto pode ler, editar, excluir a página Teste O conceito pode até parecer complexo em um primeiro momento, mas depois de definidas as consultas restou um código PHP pequeno e simples. Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Julho 23, 2009 hehhee é interessante, fiz alguns testes aqui, porém, acredito que seria para um sistema mais avançado, para sistemas simples eu prefiro usar ao modo da simples consulta mesmo. Mais ta aí a dica pessoal do João, excelente :) Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 23, 2009 Pois é... quase uma aula. Muito boa mesmo. Vou dar uma estudada nela para implantar no meu sistema... Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Fr4nc0w 1 Denunciar post Postado Julho 24, 2009 Como todo projeto, no inicio eh legal fazer algo rápido e eficaz, mas acho que no futuro nao custa implementa esse sistema ai. mas o joao me respondeu de fato oq eu precisava...exatamente mesmo, pois eh simples de fato e eh tudo oq eu precisava, pois oq tinha lá no meu trabalho era nesse nível ai. Vlwww mesmoo cara..vo guarda nos favoritos esse tópico pra implementa isso logo na versão seguinte do sistema, pq a primeira intenção é botar no ar e começar a receber as visitas com um sistema que suporte a demanda e tenha todo o conteudo, mas dai no futuro vou melhorar, esse sistema de privilégio é oq será usado. flww e vlw! Compartilhar este post Link para o post Compartilhar em outros sites
Grimberg 0 Denunciar post Postado Novembro 12, 2010 João gostei do seu tutorial, porém a minha lógica e diferente, poderia dar uma luz para mim vou passar o código do meu controle de acesso e junto com esse controle de acesso quero integrar permissão de usuario a cada formulário possuim uma pagina index ( onde é inserido o login e senha ) validação.php <?php //include "includes/conexao_adodb.php"; include "conexao.php"; // Utiliza a função mysql_real_escape_string(var) do PHP para evitar erros no MySQL $usuario = mysql_real_escape_string($_POST['usuario']); $senha = mysql_real_escape_string($_POST['senha']); // Realiza a consulta no banco procurando pelos dados digitados pelo admin $SQL_seleciona_usuario = "select cliente.user_id , cliente.user_password , cliente.id_grupo , cliente.nome from cliente where cliente.user_id = '$usuario' and cliente.user_password = '$senha' union all select funcionario.professional_id , funcionario.professional_password , funcionario.id_grupo , funcionario.nome from funcionario where funcionario.professional_id = '$usuario' and funcionario.professional_password = '$senha'"; $result_user = $conn->GetRow($SQL_seleciona_usuario); if($result_user){ if(!isset($_SESSION)){ session_start(); } // Salva todos os dados em uma sessão $_SESSION['id_cliente'] = $result_user['user_id']; $_SESSION['id_funcionario'] = $result_user['professional_id']; $_SESSION['nome_cliente'] = $result_user['nome']; $_SESSION['nome_funcionario'] = $result_user['nome']; $_SESSION['permissao_usuario'] = $result_user['id_grupo']; $_SESSION['previlegio'] = $result_user['id_previlegio']; // Redireciona o usuario admin para a página inicial //header("Location: index.php"); comentado porque ir direto pro menu header("Location: menu.php"); exit; } else { echo '<script>alert("Login e/ou Senha inválidos")</script>'; echo '<script>window.location = "index.php"</script>'; } ?> a validação.php faz consulta com duas tabelas cliente e funcionario ambos possui login e senha e id_grupo na sua tabela para cliente é exibido apenas 1 grupo (cliente) para funcionario é exibido (administrador, funcionario e ...outros) após login e a senha for verdaira irá chamar menu.php menu.php <?php //Para startar uma sessão precisa ser o primeiro item a ser colocado. session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <title>Petshop Petaka</title> <script type="text/javascript" src="script.js"></script> <link rel="stylesheet" href="style.css" type="text/css" media="screen" /> </head> <body> <div id="art-main"> <div class="art-Sheet"> <div class="art-Sheet-tl"></div> <div class="art-Sheet-tr"></div> <div class="art-Sheet-bl"></div> <div class="art-Sheet-br"></div> <div class="art-Sheet-tc"></div> <div class="art-Sheet-bc"></div> <div class="art-Sheet-cl"></div> <div class="art-Sheet-cr"></div> <div class="art-Sheet-cc"></div> <div class="art-Sheet-body"> <div class="art-Header"> <div class="art-Header-png"></div> <div class="art-Header-jpeg"></div> <div class="art-Logo"> <h1 id="name-text" class="art-Logo-name"><a href="#">Petshop Petaka</a></h1> </div> </div> <?php include "conexao.php"; $id_permissao_usuario = $_SESSION['permissao_usuario']; $SQL_MONTA_MENU_PRIMARIO = "SELECT menu_titulo.DESCRICAO , funcionalidade.id_MENU_RAIZ FROM `grupo_funcionalidades` JOIN funcionalidade ON grupo_funcionalidades.id_funcionalidade = funcionalidade.id_funcionalidade JOIN menu_titulo ON menu_titulo.id_menu_titulo = funcionalidade.id_MENU_RAIZ WHERE id_GRUPO = '$id_permissao_usuario' GROUP BY funcionalidade.id_MENU_RAIZ"; $result_menu_primario = $conn->GetAll($SQL_MONTA_MENU_PRIMARIO); ?> <div class="art-nav"> <div class="l"></div> <div class="r"></div> <ul class="art-menu"> <?php foreach($result_menu_primario as $result_menu_primario ) { //Abre o Primeiro For ?> <li> <a href="#"><span class="l"></span><span class="r"></span><span class="t"><?php echo $result_menu_primario['DESCRICAO'] ?></span></a> <ul> <?php $cod_menu = $result_menu_primario['id_MENU_RAIZ']; $SQL_MONTA_MENU_SECUNDARIO = "SELECT funcionalidade.CAMINHO , funcionalidade.TEXTO FROM grupo_funcionalidades JOIN funcionalidade ON grupo_funcionalidades.id_funcionalidade = funcionalidade.id_funcionalidade WHERE id_GRUPO = '$id_permissao_usuario' and funcionalidade.id_MENU_RAIZ = '$cod_menu' ORDER BY funcionalidade.POSICAO"; $result_menu_secundario = $conn->GetAll($SQL_MONTA_MENU_SECUNDARIO); ?> <?php foreach($result_menu_secundario AS $result_menu_secundario){ //Inicio do Segundo For ?> <li><a href="<?php echo $result_menu_secundario['CAMINHO']; ?>"><?php echo $result_menu_secundario['TEXTO']; ?></a></li> <?php } ?> </ul> </li> <li> <?php } //Fecha o primeiro For ?> <a href="logout.php"><span class="1"></span><span class="r"></span><span class="t">Sair</span></a> </li> </ul> </div> <div class="art-contentLayout"> <div class="art-content"> <div class="art-Post"> <div class="art-Post-body"> <div class="art-Post-inner"> <h2 class="art-PostHeader"> </h2> <div class="art-PostContent"> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <table class="table" width="100%"> <tr> <td width="33%" valign="top"> </td> <td width="33%" valign="top"> </td> <td width="33%" valign="top"> </td> </tr> </table> </div> <div class="cleared"></div> </div> <div class="cleared"></div> </div> </div> </div> </div> <div class="cleared"></div><div class="art-Footer"> <div class="art-Footer-background"></div> </div> <div class="cleared"></div> </div> </div> <div class="cleared"></div> <p class="art-page-footer"> </p> </div> </body> </html> esse menu.php ele ira apresentar as tabelas para cada usuario por exemplo o grupo cliente ( irá aparecer esse menu.php --> cadastro cliente, consultar agenda de dogwalker, agenda de taxi, agenda do veterinario) e o grupo funcionario (irá aparecer --> cadastro cliente, cadastro de funcionario ) a minha ideia é como devo fazer a permissão usando essa logica colocando o grupo cliente ( alterar cadastro cliente, visualizar agenda de veterinario) e também poder trocar esses previlégio vou passar as tabelas de cada tabela funcionalidade id_funcionalidade nome texto caminho posicao id_menu_raiz tabela grupo id_grupo nome tabela grupo_funcionalidade id_grupo_funcionalidade id_grupo id_funcionalidade tabela menu_titulo id_menu_titulo descricao caso queria ver o links abaixo http://187.63.32.67/~petshop/ProjetoB/controle_peteka/ teste login grim e senha 123 (cliente) login sonia e senha 123 (funcionario) Compartilhar este post Link para o post Compartilhar em outros sites