|
Powered by Open Sources Licences from: |
|
PROJETO (Product Backlog, Taskboard, Burndown) | RELATORIOS (Svn, Timetracking, Changelog) | COMUNIDADE (Forum Google, Forum 3layer, Blog, Noticias) | DOWNLOADS (Latest, Nightbuild, Svn) |
Bem-Vindo.
Magoo é um framework diferenciado para o gerenciamento de permissões de usuários em aplicações java, sejam web ou desktop. Utilizando a premissa de não-intrusividade, qualquer aplicação existente pode ser gerenciada por ele, independente da sua arquitetura interna ou tecnologias utilizadas em sua construção. Tendo uma base neutra de usuários e permissões, ele é aderente ao JAAS e pode ser facilmente integrado a mecanismos legados ou serviços de diretório, como o Active Directory. Com um modelo de informações totalmente OO, permite herança de permissões e a vinculação dessas tanto a dados quanto à regras de negócio. |
NOTA: (1) Recurso em pesquisa.
De forma geral, o modelo de permissões e usuários de uma aplicação é intrinsicamente ligado ao seu código-fonte. Para dar um exemplo, considere esse fragmento de código em uma pseudo-linguagem:
<ui:menu>
<ui:menuItem>File</ui:menuItem>
<ui:menuItem>Edit</ui:menuItem>
<if:$user.role="owner">
<ui:menuItem>Tools</ui:menuItem>
</if>
<ui:menuItem enabled='<%=user.role=="admin"%>'>Configuration</ui:menuItem>
</ui:menu>
|
O objetivo desse código é exibir um conjunto de itens de menu numa tela, sendo que usuários do tipo "owner" podem ver a opção "Tools" e usuários "admin" têm habilitada a opção "Configuration".
Esse exemplo mostra claramente a dependência do código-fonte do sistema em relação à estrutura e conteúdo do controle de acesso. Nessa aplicação, caso se deseja trocar o pertil "owner" por "dono" o custo de refatoração é extremanente alto. Da mesma forma, caso fosse necessário habilitar o menu "Configuration" para todos os usuários, sem que eles se tornassem administradores, isso novamente levaria à alteração de código-fonte.
Foi pensando nesse cenário que o Magoo foi projetado. A idéia básica por trás do Magoo é retirar totalmente do código da aplicação qualquer referência ao mecanismo de controle de acesso. Assim, o código da aplicacão seria simplesmente isso:
<ui:menu> <ui:menuItem>File</ui:menuItem> <ui:menuItem>Edit</ui:menuItem> <ui:menuItem>Tools</ui:menuItem> <ui:menuItem>Configuration</ui:menuItem> </ui:menu> |
Mas como então é feito o controle dos menus "Tools" e "Configuration"?
A resposta é: De forma externalizada2.
E para demonstrar isso, consideramos um exemplo fictício de configuração do Magoo, onde as permissões, perfis e elementos de tela são armazenados em um arquivo de texto plano, como:
* : disabled : //ui/menuItem[Configuration] * : invisible : //ui/menuItem[Tools] admin : enabled : //ui/menuItem[Configuration] owner : visible : //ui/menuItem[Tools] |
Nesse arquivo, as duas primeiras linhas referem-se a todos (asterisco) os perfis, e indicam que eles têm o menu "Configuration" desabilitado e o menu "Tools" invisível. Logo abaixo, as duas últimas linhas denotam que o administrador tem o menu "Configuration" habilitado e que o perfil "owner" tem o menu "Tools" visível.
A mesma configuração poderia ser feita de forma otmizada, usando a palavra reservada except, como abaixo:
* except(admin) : disabled : //ui/menuItem[Configuration] * except(owner) : invisible : //ui/menuItem[Tools] |
Isso, produz o mesmo resultado de antes, ou seja, todos os perfis, com exceção do "admin" vão ter a entrada de menu "Configuration" desabilitada. E todos os perfis, com exceção do "owner" não poderão exergar a entrada de menu "Tools".
E qual a vantagem nisso? Algumas são:
Obviamente, esse é um exemplo bem simples. Entretanto, inúmeras variações podem ser feitas, sem que a essência se perca.
Complementando, salienta-se que também o suporte à permissões baseadas em regras de negócio, e mesmo permissões sobre o conteúdo de controles (por exemplo, um usuário administrador que poderia visualizar mais itens em uma combobox do que um usuário comum) é possível e com a mesma flexibilidade.
NOTA: (2) Este mesmo tipo de permissionamento declarativo já é utilizado em ambientes java web há vários anos. Entretanto, as soluções existentes carecem do compatilhamento eficiente de usuários e perfis entre sistemas diferentes, não são capazes de aplicar permissões em nĩveis mais granulares (tais como um controle de tela dentro de uma página), não possuem um mecanismo inteligente de descoberta e catalogação de informações a serem gerenciadas, não suportam alterações em tempo de execução, exigem a alteração de pelo menos alguma parte (arquivos de configuração) da aplicação para que a segurança seja aplicada e outros elementos. Todas essas necessidades são transparentemente implementadas pelo Magoo.
Neste inicio de 2009, o projeto foi retomando. Com um reescalonamento de prioridades, esperamos que para o primeiro semestre de 2009 ja tenhamos uma versao operacional, com suporte para aplicacoes JSF, e modulo administrativo de gerenciamento em uma interface GWT.
Empresa |
Produtos |
Usos |
Mais informacoes |
|
|---|---|---|---|---|
|
Profiling e analise de memoria e processamento das aplicacoes Merlin, Magoo e outros projetos da area Incubator |
|