pontoNETpt
A comunidade PontoNetPT está direccionada a todos os programadores que trabalhem com a plataforma .NET.
DBAuthorization – Parte 10 – Conclusão

Finalmente chegamos na conclusão desta série. A partir deste momento você tem todas as políticas de acesso as páginas dentro do banco de dados, com uma arquitetura flexível e que pode ser estendida para ser suportada por outros repositórios.

Uma vez que o provider foi criado, sempre que nós precisamos das informações, seja para aplicar a autorização durante a execução ou pelas telas de gerenciamento das informações, sempre utilizamos o provider para isso (classe DBAuthorization), o que torna a aplicação e a API totalmente independente de qual fonte de dados estamos utilizando para armazenar essas informações.

É importante dizer também que, assim como a UrlAuthorization, a DBAuthorization avalia as permissões de forma sequencial, ou seja, a ordem em que elas aparecerem cadastradas no banco de dados será a ordem de avaliação durante a execução. Neste momento não temos nenhuma forma de reordenação dos registros, mas isso pode ser facilmente implementado. Um boa prática aqui é sempre você ir cadastrando em uma ordem coerente, ou seja, negue o acesso anônimo para um diretório como um todo mas, dentro dele, customize o acesso à algumas seções de acordo com os papéis.

Outra semelhança que o DBAuthorizationModule possui em relação ao UrlAuthorizationModule é que faz uso da propriedade User da classe HttpContext. Essa propriedade retorna a instância de uma classe que implementa a interface IPrincipal e, independentemente do tipo de autenticação que está utilizando (Forms (GenericPrincipal) ou Windows (WindowsPrincipal)), ele sempre irá trabalhar de forma genérica. Utilizará a propriedade IIdentity para determinar o nome do usuário e o método IsInRole para avaliar se o usuário faz ou não parte de um determinado papel/grupo.

Para efeitos de centralização e reusabilidade da API, você pode instalar essa DLL dentro do GAC (Global Assembly Cache) e registrar a seção “dbAuthorization” no arquivo machine.config. Esta técnica evitará com que todas as aplicações que desejam fazer uso deste recurso, não precisem explicitamente fazer o registro.

Para finalizar, todo esse projeto não foi implementando em um ambiente real. Os testes foram locais e, se desejar colocá-lo em um ambiente de produção, chamo a atenção para que você refaça os testes, analisando todas as possibilidades necessárias para garantir o bom funcionamento dele.

Quero também agradecer imensamente ao Luis Abreu, expert em tecnologias Microsoft, que revisou e me deu dicas extremamente importantes para ajudar na elaboração desta série. O código para download está no seguinte endereço: http://www.projetando.net/Temp/Posts/DBAuthorization.zip 


Posted 9-3-2009 23:35 por Israel Aéce
Filed under: ,

Comments

Israel Aéce wrote re: DBAuthorization – Parte 10 – Conclusão
on 10-3-2009 20:17
Boas Thiers,

Neste caso, acredito que você poderia condicionar a exibição do controle de acordo com o perfil, ao como:

this.GridView1.Visible = User.IsInRole("Admin");

É isso?
Israel Aéce wrote re: DBAuthorization – Parte 10 – Conclusão
on 10-3-2009 23:00
Boas Thiers,

Uma vez em um projeto que trabalhei eu customizei alguns controles que precisa controlar a permissão deles. Ao invés de utilizar o Button, eu herdei dele e customizei, adicionando uma propriedade chamada AllowRoles que recebe um array contendo todas as roles que podem visualizar este controle.

Na renderização do controle, eu analisava as roles permitidas, e testava cada uma delas para o usuário corrente. Se o usuário estivesse dentro de uma delas (User.IsInRole), eu exibia o controle, e caso contrário, ocultava ou desabilitava.

Acredito que desta forma é muito mais simples de se trabalhar, já que mais uma vez, você controla também por Roles e utilizando a mesma infraestrutura.

Agora, se quiser em tempo de execução alterar as Roles que esão permitidas para o controle, então você tem que mover isso para algum outro lugar, como a base de dados ou até mesmo o arquivo XML mas, antes de colocar isso efetivamente em produção, analise o overhead que pode causar, pois se tiver muitas requisições e páginas com muitos controles, talvez deixará o gerenciamento complexo e pouco perfomático.

Att,
Anonymous wrote re: DBAuthorization – Parte 10 – Conclusão
on 1-7-2009 0:05
Israel parabéns pelo seu trabalho. Ficou muito bom!
Agora me surgiu uma pequena dúvida. O controle das paginas através do banco de dados é interessante, mas existe alguma maneira de eu controlar os "controles" dessa pagina também por banco? Ex: Um listbox iria aparecer para o setor de TI e nao para o RH em uma mesma pagina.

o uso do loginview controla isso só que fica uma maneira muito manual ( do mesmo jeito do locations se nao utilizasse o DBAuthorization)

Alguma suguestao?

Abs,
Anonymous wrote re: DBAuthorization – Parte 10 – Conclusão
on 1-7-2009 0:05
Israel, não seria exatamente isso. Posso ter me expressado mal. Minha situação é a seguinte. Possuo um webform (pareceido com a ideia do seu)que é utilizado para dar permissao para as paginas e permissão (enable e visible) para os controles. Meu problema é exatamente nessa segunda parte. Listar todos os controles que estão na página para pode-lós adicionar ao banco. No momento estou lendo o arquivo .aspx linha por linha e pegando os IDs dos controles. Porém existem controles (ex. formview) que possuem controles dentro. Por causa disso a listagem desses controles fica mais dificil e cheia de detalhes pois tenho que implementar os "detalhes" de cada controle

Não sei se você conseguiu entender agora, mas o que eu queria fazer era mais ou menos isso.

Obrigado :)
Anonymous wrote re: DBAuthorization – Parte 10 – Conclusão
on 2-7-2009 1:22
Israel parabéns pelo seu trabalho. Ficou muito bom!
Agora me surgiu uma pequena dúvida. O controle das paginas através do banco de dados é interessante, mas existe alguma maneira de eu controlar os "controles" dessa pagina também por banco? Ex: Um listbox iria aparecer para o setor de TI e nao para o RH em uma mesma pagina.

o uso do loginview controla isso só que fica uma maneira muito manual ( do mesmo jeito do locations se nao utilizasse o DBAuthorization)

Alguma suguestao?

Abs,
Anonymous wrote re: DBAuthorization – Parte 10 – Conclusão
on 2-7-2009 1:22
Israel, não seria exatamente isso. Posso ter me expressado mal. Minha situação é a seguinte. Possuo um webform (pareceido com a ideia do seu)que é utilizado para dar permissao para as paginas e permissão (enable e visible) para os controles. Meu problema é exatamente nessa segunda parte. Listar todos os controles que estão na página para pode-lós adicionar ao banco. No momento estou lendo o arquivo .aspx linha por linha e pegando os IDs dos controles. Porém existem controles (ex. formview) que possuem controles dentro. Por causa disso a listagem desses controles fica mais dificil e cheia de detalhes pois tenho que implementar os "detalhes" de cada controle

Não sei se você conseguiu entender agora, mas o que eu queria fazer era mais ou menos isso.

Obrigado :)

Add a Comment

(requerido)  
(opcional)
(requerido)  
Remember Me?
If you can't read this number refresh your screen
Enter the numbers above:  
Powered by Community Server (Commercial Edition), by Telligent Systems