• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

overcloked

Autenticação c/ roles para acesso a modulos - método de implementação

5 mensagens neste tópico

Boas, já lá ia um tempo desde o ultimo post no forum!

Estou neste momento a iniciar-me no mundo do PHP e tenho um projecto para fazer que irá precisar de um sistema de autenticação com roles (leia-se que cada utilizador vai ter acessos restrictos a modulos do site).

O sistema modular que estou a usar e qq coisa deste genero:

if (isset($_GET['module'])){
$mod = $_GET['module'];
switch ($mod){
	case 'clients':
		if (isset($_GET['action'])){
			$act = $_GET['action'];
			switch ($act){
				case 'addClient':
					include('clients/addClients.php');
				break;
				case 'list':
					//List Clientes
				break;
			}
	}
	break;
	case 'finance':
		if (isset($_GET['action'])){
			$act = $_GET['action'];
			switch ($act){
				case 'viewContracts':
					include('finance/viewContracts.php');
				break;
			}
		}
	break;
}
}

Não testei o codigo fiz agora só para exemplificar (errors are expected ;) )

Agora a parte das roles é a minha duvida, quero por exemplo que o user X tenha acesso ao addClientes mas não ao viewContracts, como implementariam isto?

Tava com a ideia de validar as roles associadas ao ultilzador antes do include do modulo e depois fazer ao não include dependendo do acesso do utilizador, que acham?

Já agora o que acham deste sistema de modulos, é funcional? Há outra forma melhor de fazer isto?

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Crias tabelas na base de dados para o efeito :

users -> tabela dos users

roles -> tabela dos "roles"

actions -> tabela das acções de cada "role"

actions_roles -> tabela que liga cada acção a um "role"

roles_users -> tabela que liga os "roles" aos users

Os "roles" são categorias, como "administrador", "editor", "user", etc ..

Quanto ao sistema, podes converter o código para algo mais simples e igualmente funcional :

(não testado)


$mod = $_GET['module'];
$act = $_GET['action'];

inlude $mod.'/'.$act.'.php';

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou então crias uma função para cada 'tipo' de conta.

if(is_client()) echo '<a href="">opção menu</a>';

if(is_finance()) echo '<a href="">opção menu</a>';

Entendes a ideia?

E depois em cada página pões

if(!is_client()) die('Não pode tar aqui');

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de colocar à cabeça de cada página de cada módulo a validação do utilizador poder aceder a essa funcionalidade ou não, de forma a impedir um acesso directo à funcionalidade.

Se quiseres/necessitares de ter uma granularidade de acesso mais fina, podes dividir os acessos a um módulo entre consulta e edição, permitindo assim que alguns utilizadores possam consultar mas não gerir essa informação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dá uma vista de olhos no Zend_ACL e Zend_Authentication, API's da Zend Framework, certamente facilitará o trabalho!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora