Ir para conteúdo

Arquivado

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

Fr4nc0w

[Resolvido] Sistema de privilégios

Recommended Posts

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

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

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

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

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

É 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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.