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.
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
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.
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!
Boas Leandro,
Seria isso: http://msdn.microsoft.com/en-us/magazine/cc163657.aspx?
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