Autor: Rafael Maia
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