DBAuthorization - Parte 10 - Conclusão

by Israel Aece 9. March 2009 13:49

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.israelaece.com/BlogEngine.Web/file.axd?file=2009%2f4%2fDBAuthorization.zip.

Tags:

ASP.NET | Security

Comments

8/31/2009 2:11:02 PM #

Rafael camargo

Israel, o parâmetro requestedPath do método DBAuthorizationRuleCollection.IsUserAllowed não está sendo utilizado. A exclusão do mesmo requer a exclusão de parâmetros na pilha de chamada ao método. O que deve ser feito? Posso excluir esse parâmetro ou o mesmo deve ser utilizado no método?

Rafael camargo Brazil

8/31/2009 2:41:23 PM #

IsraelAece

Boas Rafael,

Acho que não entendi a sua dúvida. Esse parâmetro é utilizado para duas finalidades: 1) para recuperar as regras que temos definidas e 2) para verificar se o usuário corrente tem ou não direitos para acessá-lo.

IsraelAece Brazil

9/23/2009 9:47:26 AM #

Leandro Bernini

Bom dia Israel, poderia tirar uma dúvida, estou querendo integrar essa implementação DBAuthorization com o sitemap para fazer meu Menu dinamico de acordo com as permissões definidas no DBAuthorization. É possível? voce pode me dar um luz. Muito Obrigado e Parabéns!

Leandro Bernini Brazil

9/23/2009 10:38:05 AM #

IsraelAece

Boas Leandro,

Seria isso: msdn.microsoft.com/en-us/magazine/cc163657.aspx?

IsraelAece Brazil

4/9/2010 3:15:37 PM #

Eduardo Miano

Israel

Não entendi essa linha de codigo do arquivo global.asax

void Application_Start(object sender, EventArgs e)
    {
        DBAuthorization.Provider.DataChanged += (source, args) => args.ClearCache = true;
    }

Qual seria o codigo em vb.net??

Att

Eduardo Miano

Eduardo Miano Brazil

4/9/2010 4:34:24 PM #

IsraelAece

Boas Eduardo,

Para VB.NET, você pode fazer:

AddHandler DBAuthorization.Provider.DataChanged, AddressOf ClearCache

Depois crie o método ClearCache:

Private Sub ClearCache(sender As Object, args As CachingRulesEventArgs)
    args.ClearCache = True
End Sub

IsraelAece Brazil

Comments are closed

Powered by BlogEngine.NET 1.5.0.0
Theme by Mads Kristensen

Sobre

Meu nome é Israel Aece e sou especialista em tecnologias de desenvolvimento Microsoft, atuando como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. [ Mais ]

Twitter

Host