domingo, 11 de maio de 2008

Impersonate infalível

Segue aqui uma dica de como executar um trecho de código sobre o contexto de outro usuário que não a própria aplicação.

A classe utiliza bibliotecas nativas do Windows para autenticar o e assim identificar o contexto do usuário que você vier definir como o "executor" do trecho de código que precisa ser "impersonado".

Exemplo de usoi da classe "Impersonator":


using (new Impersonator( "admin", "dominio", "minha_senha123" ))
{

Util.LogEntry("Quem passou por esse trecho de código foi o administrador");

//Segue executando outras operações sob o contexto do usuário "admin"

}

A classe implementa a interface IDisposable. Assim, podemos instanciar a classe usando a diretiva using e aninhar o código a ser "impersonado" nesse escopo. Como todos sabemos, assim que o código sai do escopo da diretiva using, o método Dipose é invocado atumaticamente.

Como vocês podem ver no código, o método Dispose está implementado de forma a devolver o contexto para o usuário default assim que for chamado.

Mas e se caso eu queira compilar essa classe e cedê-la a alguem que pretenda usá-la num código VB .NET? Em VB .NET não existe a diretiva "using".

Basta chamar o Método Dispose explicitamente ou o método "UndoImpersonation();".

Chega de conversa e vamos ao download do código.

É isso ai.

Abraço e até o próximo post

Referencias: A classe original foi desenvolvida por Uwe Keim e modificada por mim.

Nenhum comentário: