VB .NET - Usando os recursos do WindowsIdentity - representando usuários


Neste artigo eu vou mostrar como usar os recursos da classe WindowsIdentity para realizar algumas tarefas básicas como exibir os grupos do usuário atual do Windows, verificar se o usuário atual possui direitos de administrador, representar usuários, etc.

A classe WindowsIdentity representa um usuário do Windows e possui métodos que podemos usar para realizar tarefas básicas com o usuário do Windows.

Essa classe esta presente no namespace System.Security.Principal que representa o contexto de segurança sob o qual a aplicação esta sendo executada.

Neste artigo eu vou realizar algumas tarefas básicas usando os recursos dessa classe em um projeto Windows Forms usando a linguagem VB .NET.

Recursos usados:

Criando o projeto no Visual Studio

Abra o VS Community 2013 clique em New Project;

Selecione o Visual Basic -> windows Forms Application e informe o nome Usando_WindowsIdentity e clique no botão OK;

No formulário padrão inclua dois botões de comando : btnGruposUsuarioAtual e btnVerificarDireitos e um ListBox(lbUsuarios)

Defina o leiaute do formulário conforme a figura a seguir:

1- Exibindo os grupos do usuário do Windows

Para obter os grupos no qual o usuário atual do Windows esta definido primeiro obtemos o usuário atual usando o método GetCurrent() e depois verificamos os grupos que o contém:

Abaixo temos o código no evento Click do botão - Obter os grupos do usuário do Windows - que lista os grupos do usuário atual:

    Private Sub btnUsuarioAtual_Click(sender As Object, e As EventArgs) Handles btnGruposUsuarioAtual.Click
        Try
            Dim usuario As WindowsIdentity = WindowsIdentity.GetCurrent()
            Dim nome = usuario.Name
            For Each group In usuario.Groups
                lbUsuarios.Items.Add(group.Translate(GetType(NTAccount)).ToString())
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

Executando o projeto obtemos:

2- Verificando se o usuário possui direitos de administrador do sistema

Em muitos casos, é essencial para saber se o usuário possui direitos de administrador ou não. Um exemplo é quando queremos escrever um valor em HKEY_LOCAL_MACHINE que requer direitos de administrador ou em HKEY_CURRENT_USER que não requer esses direitos.

 Private Sub btnVerificarDireitos_Click(sender As Object, e As EventArgs) Handles btnVerificarDireitos.Click
        Try
            If IsUserAdministrador() Then
                MessageBox.Show("O usuário atual possui direitos de administrador")
            Else
                MessageBox.Show("O usuário atual Não possui direitos de administrador")
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

 

O código acima usa a função IsUserAdministrador() que retorna true se o usuário possuir direitos de administrador e false senão possuir.

Abaixo vemos o código desta função:

Public Shared Function IsUserAdministrador() As Boolean
        Try
            Dim usuarioAtual As WindowsIdentity = WindowsIdentity.GetCurrent()
            Dim principal As New WindowsPrincipal(usuarioAtual)
            Return principal.IsInRole(WindowsBuiltInRole.Administrator)
        Catch ex As Exception
            Throw
        End Try
    End Function

Uma forma mais elegante de obter o mesmo resultado seria criar  uma classe no projeto chamada, por exemplo, de Seguranca e definir o método a seguir:

Imports System.Security.Principal
Public Class Seguranca
    Public Shared Function IsUserAdministrator() As Boolean
        Dim isAdmin As Boolean
        Try
            'obtem o usuário atual logado
            Dim user As WindowsIdentity = WindowsIdentity.GetCurrent()
            Dim principal As New WindowsPrincipal(user)
            isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator)
        Catch ex As UnauthorizedAccessException
            isAdmin = False
        Catch ex As Exception
            isAdmin = False
        End Try
        Return isAdmin
    End Function
End Class

Pegue o projeto completo aqui : Usando_WindowsIdentity.zip

Rogo-vos, pois, eu, o preso do Senhor, que andeis como é digno da vocação com que fostes chamados,
Com toda a humildade e mansidão, com longanimidade, suportando-vos uns aos outros em amor,
Procurando guardar a unidade do Espírito pelo vínculo da paz.

Efésios 4:1-3

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti