Continuando a nossa seqüência de artigos para desenvolver uma solução em .Net de gerenciamento de usuários do Active Directory, vamos implementar mais alguns métodos em nossa classe. Na parte 1, definimos a estrutura do nosso projeto e criamos nossa ClassLibrary que chamamos de: dllActiveDirectory.  Terminamos o artigo implementando o método VerificaUsuario.

 

Vamos agora implementar quatro métodos:

·         CriarUsuario

·         AlterarSenha

·         HabilitaUsuario

·         DesabilitaUsuario

 

Obs: Conforme já citado na primeira parte desse artigo, a classe a ser implementada nesse projeto é baseada em uma classe já existente.

 

O primeiro método a ser criado será o método HabilitaUsuario que é responsável por ativar a conta de usuário no AD. Em seguida será implementado também o método DesabilitaUsuario.Veja o código dos métodos na listagem abaixo.

 

//método habilita usuário

        public static void HabilitaUsuario(DirectoryEntry de)

        {

            object ent = de.NativeObject;

            Type type = ent.GetType();

            type.InvokeMember("AccountDisabled", BindingFlags.SetProperty, null, ent, new object[] { false });

            de.CommitChanges();

            de.Close();

            de.Dispose();

        }

 

        //método que desabilita um usuário

        public static void DesabilitaUsuario(DirectoryEntry de)

        {

            de.Properties["userAccountControl"][0] = ADParametrosContas.UF_NORMAL_ACCOUNT | ADParametrosContas.UF_DONT_EXPIRE_PASSWD | ADParametrosContas.UF_ACCOUNTDISABLE;

            de.CommitChanges();

            de.Close();

        }

Listagem 1 – Métodos Habilita e Desabilita Usuários

 

Dando continuidade a implementação dos métodos, vamos implementar agora o método AlterarSenha, que invoca o método SetPassword para alterar a senha de um usuário. Veja na listagem 2 a codificação deste método.

 

public static void AlterarSenha(DirectoryEntry de, string Senha)

        {

            //invoca o método SetPassword para troca a senha do usuário

            de.Invoke("SetPassword", new Object[] { Senha });

        }

Listagem 2 – Método Alterar Senha

 

Por último, é hora de codificar o método CriarUsuario , que utilizará os métodos criados anteriormente. Na listagem 3 temos a implementação desse método.

 

//MÉTODO PARA CRIAR UM NOVO USUÁRIO NO ACTIVE DIRECTORY

        public static DirectoryEntry CriarUsuario(string cn, string senha, string caminho, string nome)

        {

            string LDAPDomain = "/" + caminho + "," + GetLDAPDomain();

           

            //cria uma instância de diretório

            DirectoryEntry de= GetDirectoryObject(LDAPDomain);

            DirectoryEntry usuario = de.Children.Add("CN=" + nome, "user");

            //PROPRIEDADES DO USUÁRIO

            usuario.Properties["name"].Value = nome;

            usuario.Properties["sAMAccountName"].Value = cn;

            usuario.Properties["displayname"].Value = nome;

            usuario.Properties["userPrincipalName"].Value = cn;

            usuario.CommitChanges();

            //MÉTODO QUE ALTERAR A SENHA DO USUÁRIO

            AlterarSenha(usuario, senha);

            //COMMIT CHANGES EXECUTA E REALIZA AS INSERÇÕES/ALTERAÇÕES NA BASE DO AD

            usuario.CommitChanges();

            //Informa que o login será alterado na primeira vez que o usuário fizer o login no AD

            usuario.Properties["userAccountControl"].Value = AdsUserFlags.PasswordExpired;

            usuario.Properties["pwdLastSet"].Value = 0;

            usuario.CommitChanges();

 

            //CHAMA O MÉTODO PARA HABILITAR A CONTA DO USUÁRIO

            HabilitaUsuario(usuario);

            usuario.CommitChanges();

 

            de.Close();

            de.Dispose();

 

            return usuario;

        }

Listagem 3 – Método Criar Usuário

 

Até o momento nossa classe já possui os métodos: VerificaUsuario,Habilita e Desabilita Usuário, AlterarSenha e CriarUsuário. Com esses métodos já é possível começar a Desenvolver a interface para gerenciar os usuários. Primeiramente vamos desenvolver nosso aplicativo Windows  Forms proposto na parte 1. O aplicativo Windows Forms será responsável pela configuração da árvore de diretórios do Active Directory, na qual a estrutura das unidades organizacionais estarão armazenadas em um banco de dados no SQL Server.

 

Diante do cenário da aplicação que se baseia esse artigo:

 

“Implementar uma solução para que os gerentes dos setores, colegiados, departamentos pudessem criar facilmente usuários para funcionários, alunos, servidores, professores, e etc.”

 

Foi necessário desenvolver um pequeno aplicativo Windows Forms que seria responsável por catalogar a árvore de diretórios do Active Directory em um banco de dados. Dessa forma quando era necessário cadastrar um usuário no sistema em um determinado caminho da árvore, o sistema iria buscar na base de dados qual o caminho completo de uma unidade organizacional.

        

Para deixar mais compreensível como funciona uma arvore de diretório no AD, veja a imagem abaixo:

 

rmdguadp2fig01.jpg 

Figura 1 – Árvore de Diretórios do Active Directory

 

Através do Console acima, podemos verificar a estrutura de uma implementação do Active Directory. Do lado esquerdo temos as unidades organizacionais (OU) e do lado direito temos os usuários cadastrados. Os usuários marcados com um ícone VERMELHO com um X em branco estão com as contas inativas.

 

A partir da árvore de diretório acima, a idéia é desenvolver uma base de dados de forma a armazenar toda a estrutura dessa árvore de diretório. Para isso estarei usando o Microsoft SQL Server 2005 Express. Antes de desenvolver a base de dados, irei explicar como funciona a estrutura do AD para esse projeto:

 

Os usuários serão cadastrados nas unidades organizacionais:

·         Alunos

·         Professores

·         Convidado

 

Os alunos estão alocados em um COLEGIADO, que pertence a um DEPARTAMENTO. Veja exemplo da estrutura de um ALUNO:

 

UESC -> DCAA -> COLEGIADO AGRONOMIA -> ALUNOS

 

Os professores e convidados estão alocados em um DEPARTAMENTO. Veja exemplo da estrutura de um PROFESSOR e VISITANTE:

 

UESC -> DCAA -> PROFESSORES

UESC -> DCAA -> CONVIDADO

 

Sendo assim, podemos concluir que a Árvore de Diretórios funciona de forma HIERÁRQUICA, com uma Unidade Organizacional que pertence a uma outra Unidade Organizacional, e uma Unidade Raiz na quais as demais unidades serão criadas.

 

Após compreender a estrutura do AD, é hora de implementar nosso banco de dados. Dessa forma, crie uma nova base de dados no SQL SERVER (DataBase -> New DataBase).

 

Nossa base de dados possuirá as seguintes tabelas:

·         Curso: contém o nome do Curso e uma Senha Padrão para que todos os usuários(alunos) pertencentes a um Curso tenha uma senha inicial padrão, que será alterada após o primeiro Login;

·         Departamento: contém o nome do Departamento e uma Senha Padrão para que todos os usuários(professores e convidados) pertencentes a um Departamento tenha uma senha inicial padrão, que será alterada após o primeiro Login;

·         Unidade: contém o nome da Unidade Organizacional;

·         CursoUnidade: contém o ID do curso, o ID da Unidade, o ID da unidade Pai, e o ID do Nó;

·         DepartamentoUnidade: contém o ID do departamento, o ID da Unidade, o ID da unidade Pai, e o ID do Nó.

 

As tabelas CursoUnidade e DepartamentoUnidade foram criadas para armazenar a hierarquia da árvore organizacional, mantendo dessa forma o numero do nó atual e qual o nó pai correspondente.

 

Veja a implementação do nosso banco de dados no diagrama abaixo:

 

rmdguadp2fig02.jpg 

Figura 2 – Base de Dados da Árvore Organizacional do AD

 

Com a base de dados implementada, quando um usuário for inserido no AD, existirá um método que retornará toda a estrutura da árvore organizacional de forma a inserir um usuário no local apropriado.

 

Após implementar a nossa tabela, é hora de desenvolver a solução em Windows Forms para gerência da árvore de diretórios. O desenvolvimento desse projeto em Windows Forms será apresentado na parte 3 deste artigo. Antes disso quero deixar alguns links interessantes para quem for trabalhar com Active Directory em dotnet ou mesmo implementar uma solução como a descrita nesse projeto. Segue a lista abaixo:

 

1.    http://www.c-sharpcorner.com/UploadFile/ecabral/

ADand.NET08242005065451AM/ADand.NET.aspx

2.    http://www.codeproject.com/dotnet/activedirquery.asp

3.    http://www.15seconds.com/issue/020730.htm

4.    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/

adschema/attributes.asp

 

Até o próximo.