quinta-feira, 18 de março de 2010

Acessando o Active Directory (LDAP) com ASP.Net - Parte 2 - Adicionando e Removendo um usuário de um grupo

 

Autor: Rafael Maia
Fonte:http://rafaelfranklinmaia.blogspot.com/2009/10/acessando-o-active-directory-ldap-com.html


Hoje estarei dando continuidade ao assunto Active Directory.
Em uma das aplicações que estive desenvolvendo foi necessário manipular o grupo ao qual um usuário pertence.

Segue o código para adicionar e remover um usuário de um grupo no Active Directory.

Adicionando usuário ao grupo:


        Dim rootEntry As New DirectoryEntry("LDAP://10.190.1.25")
        Dim Mysearcher As New DirectorySearcher(rootEntry)
        Mysearcher.SearchRoot = rootEntry
        Mysearcher.Filter = "(&(objectCategory=group)(CN=Grupo_Teste))"
        Dim result As SearchResult = Mysearcher.FindOne()
        Dim g As DirectoryEntry = result.GetDirectoryEntry()

        Dim busca As New DirectorySearcher(rootEntry)
        busca.Filter = "(sAMAccountName=RafaelMaia)"
        result = busca.FindOne()

        Dim user As DirectoryEntry = result.GetDirectoryEntry()

        g.Invoke("Add", New [Object]() {user.Path})
        g.CommitChanges()

        g.Close()
        g.Dispose()

        user.Close()
        user.Dispose()

        Mysearcher.Dispose()
        rootEntry.Close()
        rootEntry.Dispose()

No código acima estou adicionando o usuário RafaelMaia ao grupo Grupo_Teste.
Se você tentar adicionar um usuário a um grupo que ele já pertence, ocorrerá uma exception.

Por isso, é importante validar se o usuário já pertence ao grupo antes de adicioná-lo.
Isso pode ser feito facilmente utilizando o código postado no artigo anterior.
Basta consultar os dados do usuário e verificar a propriedade "MemberOf".
Esta propriedade retorna um array de string contendo todos os grupos que o usuário pertence.

Removendo usuário do grupo:


        Dim rootEntry As New DirectoryEntry("LDAP://10.190.1.25")
        Dim Mysearcher As New DirectorySearcher(rootEntry)
        Mysearcher.SearchRoot = rootEntry
        Mysearcher.Filter = "(&(objectCategory=group)(CN=Grupo_Teste))"
        Dim result As SearchResult = Mysearcher.FindOne()
        Dim g As DirectoryEntry = result.GetDirectoryEntry()

        Dim busca As New DirectorySearcher(rootEntry)
        busca.Filter = "(sAMAccountName=RafaelMaia)"
        result = busca.FindOne()

        Dim user As DirectoryEntry = result.GetDirectoryEntry()

        g.Invoke("Remove", New [Object]() {user.Path})
        g.CommitChanges()

        g.Close()
        g.Dispose()

        user.Close()
        user.Dispose()

        Mysearcher.Dispose()
        rootEntry.Close()
        rootEntry.Dispose()


Reparem que os códigos são praticamente idênticos. Alterando somente a linha a seguir:
        g.Invoke("Remove", New [Object]() {user.Path})

Antes de excluir um usuário do grupo, verifique se o mesmo pertence realmente ao grupo em questão.
Caso tente excluir um usuário que não pertence ao grupo, ocorrerá uma exception.

É muito importante também que o usuário que está rodando sua aplicação tenha permissões para executar esta operação no active directory.

Um abraço e até a próxima!!

0 comentários :

Enviar um comentário