Administração de Usuários (parte 1): CreateUserWizard customizado com Roles

 

Artigo recomendado para Visual Studio 2005 SP1

 

Introdução

 

Na primeira parte desse artigo, iremos aprender a customizar o controle CreateUserWizard para permitir definir as Roles para usuário no momento da sua criação.

 

Interface

 

Para iniciar nosso artigo, abra o Visual Studio.NET 2005 SP1 e crie um Novo Projeto > C# > ASP.NET Web Application com o nome de CreateUserWizardCustom. Depois abra o Web Form padrão (Default.aspx) e arraste um controle do tipo CreateUserWizard da categoria Login. Agora clique na Smart Tag do controle e depois em Add/Remove WizardSteps... > Add > TemplatedWizardStep [figura 1], adicionando uma nova etapa no Wizard do controle com o título “Add User to Roles”.

 

Figura 1
Figura 1 – Adicionando uma nova etapa no Wizard

 

Agora clique novamente na Smart Tag > Step: Add User To Roles > Edit Step [figura 2] para editar a nova etapa do Wizard. Em modo de edição do Wizard, clique na Smart Tag > Display: Content Template (da etapa Add User to Roles), depois adicione um controle CheckBoxList ao Content Template [figura 3].

 

Figura 2
Figura 2 – Editando a nova etapa do Wizard

 

Figura 3
Figura 3 – Escolhendo o template e adicionando o CheckBoxList ao Content Template

 

Depois adicione um controle HiddenField e nomeio-o com hdfNewUser1 [figura 4].

 

Figura 4
Figura 4 – Web Form completo

 

Agora clique no controle CreateUserWizard e em propriedades, adicione dois eventos ao código. Para isso, dê um duplo clique nos eventos: CreatedUser e NextButtonClick [figura 5] para que possamos codificá-los.

 

Figura 5
Figura 5 – Adicionando os eventos

 

Codificando

 

Vá até o código do Web Form e coloque o código da listagem 1:

 

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

namespace CreateUserWizardCustom

{

    public partial class _Default : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            if (!Page.IsPostBack)

            {

                //Preenchendo o CheckBoxList (CBL) com as Roles existentes

                loadRoles();

            }

        }

 

        private void loadRoles()

        {

            //Limpando o CBL

            CheckBoxList cbl1 = (CheckBoxList)this.TemplatedWizardStep1.ContentTemplateContainer.FindControl("CheckBoxList1");

            //CheckBoxList cbl1 = (CheckBoxList)this.CreateUserWizard1.WizardSteps[1].FindControl("CheckBoxList1");

            cbl1.Items.Clear();

            //Executando um Loop nas Roles da aplicação e adicionando ao CBL

            foreach (string role in Roles.GetAllRoles())

            {

                cbl1.Items.Add(role);

            }

        }

 

        protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)

        {

            //Localizando o TextBox com o nome do usuário inserido

            TextBox tbUser = (TextBox)this.CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("UserName");

            //Gravando o username inserido do novo usuário para podermos usar na próxima etapa

            this.hdfNewUser1.Value = tbUser.Text;

        }

 

        protected void CreateUserWizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)

        {

            //Verificando se a etapa atual é a de nº 2 (index 1)

            if (e.CurrentStepIndex == 1)

            {

                //Localizando o Controle CheckBoxList

                CheckBoxList cbl1 = (CheckBoxList)this.TemplatedWizardStep1.ContentTemplateContainer.FindControl("CheckBoxList1");

                //Adicionando as Roles selecionadas ao usuário recém criado

                addUserToRoles(cbl1, this.hdfNewUser1.Value.ToString());

            }

        }

 

        private void addUserToRoles(CheckBoxList ctl, string usr)

        {

            ArrayList rTemp = new ArrayList();

            string[] roles = null;

            for (int i = 0; i <= ctl.Items.Count - 1; i++)

            {

                if (ctl.Items[i].Selected)

                {

                    rTemp.Add(ctl.Items[i].Text);

                }

                roles = (string[])rTemp.ToArray(typeof(string));

            }

            Roles.AddUserToRoles(usr, roles);

        }

    }

}

 

Listagem 1 – Código do Web Form

 

Agora vamos configurar de forma rápida a utilização do Membership do ASP.NET 2.0 lembrando que o foco desse artigo não é ensinar como usar o Membership no ASP.NET e sim customizar o controle CreateUserWizard para lhe adicionar uma nova funcionalidade.

 

Configurando o aplicativo para usar o recurso de Membership

 

Caso já use esse recurso em sua aplicação, ignore essa etapa do artigo. Caso não saiba, siga os passos abaixo:

 

  1. Abra o Web.Config e altere a linha abaixo para:

 

<authentication mode="Forms" />

 

Dessa forma habilitará a autenticação Forms e permitirá a criação do banco de dados padrão ao iniciar o ASP.NET Web Site Administration Tool. Se tudo correr bem você verá a imagem abaixo e na linha Security verá que não existe nenhum usuário criado no momento [figura 6]:

 

Figura 6
Figura 6 – Web Site Administration Tool

 

Para que o exemplo do artigo funcione, precisamos criar algumas roles. Não se preocupe com usuários agora, você os criará quando estiver testando o exemplo do artigo.

Para criar as Roles clique em Security > Enable Roles. Irá habilitar a opção: “Create or Manage roles”. Clique nele e crie algumas Roles. No exemplo criamos: “Administrador, Editor, Usuário” [figura 7].

 

Figura 7
Figura 7 – Roles criadas

 

Pronto, agora rode o exemplo com F5 e bom trabalho!

 

Conclusão

 

Nesse artigo vimos como é simples implementar uma nova funcionalidade no controle CreateUserWizard que nos permite adicionar o usuário criado às Roles existentes.

No próximo artigo, ensinarei como listar os usuários em um GridView; Editar, Excluir e Gerenciar as Roles do usuário. Espero que gostem e aproveitem o artigo, até o próximo.

 

Referências:

Código fonte:
[http://www.i4design.com.br/artigos/CreateUserWizardCustom.zip]

 

Requisitos:
Atualização SP1 para o Visual Studio 2005:
[
http://msdn2.microsoft.com/pt-br/vstudio/bb265237.aspx]

 

 

Fabiano Vitucci Santiago
Analista de Sistemas Web das Faculdades Santo Agostinho e i4 Design Soluções em Montes Claros - MG, trabalha com Desenvolvimento de aplicativos Web, Windows e Mobile a 7 anos e a 5 se dedica ao estudo e desenvolvimento com a Plataforma .NET.

www.santoagostinho.edu.br / www.i4design.com.br

fabianosan@hotmail.com