Informática Numaboa - Tutoriais e Programação
Controle de acesso no Joomla 1.5
Dom 4 Mai 2008 20:40 |
- Detalhes
- Categoria: Joomla
- Atualização: Segunda, 02 Julho 2012 19:39
- Autor: vovó Vicki
- Acessos: 18505
Analisando o controle de acesso no Joomla 1.5 acabei descobrindo que as novas versões vêm com o phpGACL completinho e que o uso deste excelente conjunto de funções é utilizado apenas uma vez (e de modo muito precário) na autenticação de usuários. É uma pena porque, se fosse devidamente explorado, poderíamos criar novos grupos de usuários, regras de acesso e muito mais. O pessoal anda comentando que estas novas mordomias provavelmente estarão disponíveis na versão 1.6 ou 2.0, mas como até lá tem muito chão teremos tempo de aprender como este troço funciona.
Porque um sistema de controle de acesso?
Imagine que você queira abrir partes do seu site só para determinados usuários e também queira sair da mesmice de usuário registrado, editor, publicador, admin, etc. No atual estágio do Joomla não é possível fazer isto sem gastar um bom dinheiro para adquirir componentes comerciais. Fuçando um pouco mais o assunto descobri um componente gratuito da jxTENDED, o Control, baseado no phpGACL e que permite criar e gerenciar todos os tipos de objetos necessários para um controle de acesso mais estruturado e efetivo. Como faltam algumas tabelas na base de dados do Joomla, este componente cria estas tabelas e deixa tudo no jeito para que possamos incorporar novas funcionalidades em módulos, componentes e plugins que viermos a criar. Foi daí que me deu uma vontade doida de saber o que é e como funciona o phpGACL. Para servir de referência quando eu precisar e para compartilhar com vocês esta "novidade", resolvi colocar tudo neste tutorial.
Aviso aos navegantes: o componente Control, citado acima, NÃO vai permitir controlar o componente nativo com_content, responsável pela apresentação das páginas do conteúdo. Ao invés de começar a hackear o código fonte do Joomla, o melhor é adquirir experiência com componentes próprios e deixar para os desenvolvedores deste CMS a tarefa de incorporar definitivamente o phpGACL de forma mais completa
O que é o phpGACL?
O phpGACL é um conjunto de funções que permitem aplicar um controle de acesso em objetos dos tipos mais variados (páginas web, bases de dados, etc) através de outros objetos também de vários tipos (usuários, hosts remotos, etc). Ele oferece um controle de acesso de sintonia fina (ou de granularidade fina), com uma administração muito simples, e é muito rápido.
O porque do nome começar com php está na cara, mas o que vem a ser GACL? É Generic Access Control List, ou seja, Lista de Controle de Acesso Genérica. Este projeto é da autoria de Mike Benoit e pode ser encontrado na sourceforge.net. Taí o endereço, se bem que, como já disse, o Joomla traz a última versão (procure em /libraries/joomla/phpgacl - são apenas dois arquivos relativamente pequenos, o gacl.php e o gacl_api.php).
Entendendo o Controle de Acesso
Melhor do que ficar discutindo conceitos teóricos é partir para exemplos práticos. Vamos imaginar o seguinte cenário: Maremoto é o capitão do navio Princesa dos Mares e Barrica é seu imediato. Eles levam alguns passageiros a bordo: Zé Arruela, Zé do Boné, Margarida e Papagaio. Maremoto precisa definir restrições de acesso para vários recintos do navio: Cabine de Comando, Refeitório, Despensa e Casa das Máquinas.
Maremoto diz: "Eu e o Barrica precisamos ter acesso a qualquer recinto mas, depois que ele acabou com as barras de chocolate, proibi o Barrica de chegar perto da despensa. Os passageiros só podem entrar no refeitório".
A partir de agora vamos assumir que o acesso é booleano, isto é, a verificação do acesso de uma pessoa a um determinado recinto é PERMITIDO (ALLOW) ou PROIBIDO (DENY). Não existe mais ou menos, é sim ou não. Se mapearmos esta declaração numa matriz de acesso que mostre quem tem acesso a que, o resultado será este (0 significa PERMITIDO e X significa PROIBIDO):
Quem/Onde | Comando | Refeitório | Despensa | Máquinas |
Maremoto | 0 | 0 | 0 | 0 |
Barrica | 0 | 0 | X | 0 |
Arruela | X | 0 | X | X |
Boné | X | 0 | X | X |
Margarida | X | 0 | X | X |
Papagaio | X | 0 | X | X |
As colunas mostram os recintos de acesso restrito e as linhas mostram as pessoas que podem solicitar acesso a estes recintos. Em termos mais gerais, os "recintos" são "coisas cujo acesso precisa ser controlado". Chamamos estas "coisas" de Objetos de Acesso Controlado (ACO Access Control Objects). As pessoas são "coisas que solicitam acesso" e são chamadas de Objetos de Solicitação de Acesso (ARO Access Request Objects). As pessoas solicitam acesso aos recintos ou, na terminologia ACL, AROs solicitam acesso a ACOs.
Existe um terceiro tipo de objeto, o Objeto de eXtensão de Acesso (AXO Access eXtension Object) que será apresentado a vocês mais adiante. Estes objetos são coletivamente chamados de Objetos de Acesso (Access Objects).
Administrar acessos usando uma matriz de acesso como a mostrada acima tem vantagens e desvantagens. As vantagens são:
- Sua granularidade é muito fina. É possível controlar o acesso para cada uma das pessoas se for necessário.
- É muito fácil ver quem tem acesso a o que. A resposta fica na intersecção da pessoa e do recinto.
As desvantagens, por sua vez, são as seguintes:
- Fica difícil administrar em larga escala. 6 passageiros e 4 recintos é uma coisa bastante simples, mas e se fosse um transatlântico com milhares de passageiros e centenas de recintos? E se fosse preciso restringir o acesso a grupos grandes e ainda assim manter uma granularidade suficiente para poder controlar as pessoas individualmente? A tarefa seria muito difícil, trabalhosa e propensa a erros.
- Ficaria difícil resumir ou visualizar. O exemplo anterior é bastante simples, mas, e se a matriz fosse a mostrada logo abaixo? Mesmo com pouca gente a coisa fica bem mais complicada.
Quem/Onde | Comando | Refeitório | Despensa | Máquinas |
Maremoto | 0 | 0 | 0 | 0 |
Barrica | 0 | X | X | 0 |
Arruela | X | 0 | X | 0 |
Boné | X | 0 | X | X |
Margarida | X | X | 0 | X |
Papagaio | 0 | 0 | X | X |
- Anterior
- Próximo >>