LAYERDEV

 Busca Online:

 
Seja bem vindo(a) Visitante, você não está logado deseja logar
no portal para participar de serviços e promoções ? clique aqui.


No caso de perder a senha, acesse aqui e receba por e-mail.
Deseja entrar em contato conosco, acesse aqui e mande-nos um e-mail.

Customizando o Membership e Role Provider

por Mauricio Junior em 1/1/2011 0

 

O Framework(ASP.NET) 2.0 veio para facilitar a vida dos programadores, uma melhoria é na hora que precisamos criar usuários e autenticar(Membership), outra é o controle de acesso a determinadas páginas da nossa aplicação, criação de regras de quem pode e quem não pode acessar(Roles), mas e quando precisamos customizar nossa aplicação, ou seja criar nossos próprios métodos, criar uma tabela customizada, não utilizando o padrão ASPNETDB.MDF,  este é o objetivo deste artigo, mostrar como customizar os Providers Membership e Roles.

 

 

Há um tempo atrás tive que fazer uma Intranet para um colégio, onde o diretor gostaria de ter acesso às senhas dos usuários, informou que frequentemente os professores esqueciam e gostaria que os dados fossem de fácil acesso para ele manipular.

 

Minha primeira idéia foi desenvolver tudo do zero, pensei já tenho tudo pronto no ASP.NET 2.0, componentes de Login, componentes para criar usuários e etc. Por que não uso o que já tenho e customizo com o que o colégio precisa?

 

Meu primeiro passo foi criar a tabela de usuários (Figura 1).

 

Figura 1 – Tabela de usuário

 

 

Um outro requisito era criar uma área administrativa onde somente professores coordenadores (Admin) tinham acesso, e uma segunda área onde somente professores logados (OnLine) poderiam ver as noticias.

 

Para resolver esta questão eu criei duas pastas (Figura 2).

 

 

Figura 2 – Pastas restritas.

 

  

Somente os coordenadores poderiam acessar a pasta Admin e os usuários logados a pasta OnLine. Como eu fiz isso?

 

 

Creia outra tabela, onde eu defino os cargos (Roles) de cada professor (Figura 3).

 


Figura 3 – Tabela Role

 

  

E uma terceira tabela onde eu informo o usuário com o seu respectivo cargo (Rolename) (Figura 3).

 

 

 

Veja na (Figura 4) a estrutura completa do banco.

 

 

Figura 4 – Estrutura do banco MyDatabase



Eu poderia, sem problema nenhum utilizar o banco ASPNETDB.MDF que o ASP.NET 2.0 cria como padrão, mas além de querer customizar minha aplicação eu também gostaria de aprender como fugir do padrão.

 

O próximo passo era sobrescrever as classes de Membership e Roles, na classe MembershipProvider eu tenho todos os métodos para criar usuários, alterar senhas, excluir usuários etc. E como eu criei o meu próprio banco eu precisava também criar meus próprios métodos e instruções SQL, para isso eu crie uma classe chamada MyCustomMembershipProvider.cs, esta classe herda da classe MembershipProvider.

 

A classe MembershipProvider é uma classe abstrata e por este motivo eu tenho que sobrescrever todos os seus métodos, com o VS 2005 isso é fácil, basta você fazer a herança, clicar com o botão direito em cima da classe que esta herdando e clicar em Implement Abstract Class (Figura 5)

 

Figura 5 – Implement Abstract Class

 

 

O próximo passo é sobrescrever os métodos que eu preciso, como por exemplo Create User (Listagem 1)

 

public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)

    {

        bool result = false;

 

        MembershipUser user = new MembershipUser(Name, username, providerUserKey,

            email, passwordQuestion, null, isApproved, false, DateTime.Now, DateTime.Now,

            DateTime.Now, DateTime.Now, DateTime.Now);

 

        User newUser = new User(username, password, email);

        result = newUser.Save();

 

        if (result)

        {

            status = MembershipCreateStatus.Success;

            return user;

        }

        else

        {

            status = MembershipCreateStatus.ProviderError;

            return null;

        }       

    }

 

Listam 1 – Método CreateUser

 

 

Além do método onde eu crio os usuários, também sobrescrevi o método de validação de usuário na classe Membership.

public override bool ValidateUser(string username, string password)

 

 

Criei a página utilizando o componente CreateUserWizard (Figura 6)

 

 

Figura 6 – CreateUserWizard

 

 

 

Ao clicar em Criar Usuário, irei chamar o método CreateUser.
public override MembershipUser CreateUser

 

 

Em seguida eu criei a classe MyCustomRoleProvider onde herdei da classe RoleProvider, a classe RoleProvider também é uma classe abstrata, neste caso eu fiz o mesmo processo anterior (Figura 5).

public class MyCustomRoleProvider : RoleProvider

 

Nesta classe eu sobrescrevi os seguintes métodos.

 

public override void CreateRole(string rolename)

Criação dos cargos

 

public override string[] GetRolesForUser(string username)

Obter os cargos criados

 

 

public override bool RoleExists(string roleName)

Verificar se um cargo já existe.

 

 

Neste momento eu consigo criar os cargos e salvar na tabela Rolename, em seguida eu posso cadastrar os cargos para cada usuário (Figura 3).

 

 

Para restringir a pasta Admin eu criei um arquivo Web.Config (Listagem 2), este arquivo permite acesso aos professores Admin e nega acessos aos demais usuários

 

<configuration>

  <system.web>

    <authorization>

      <allow roles="Admin"/>

      <deny users="*"/>

    </authorization>

  </system.web>

</configuration>

Listam 2 – Web.Config na pasta Admin

 

 

Para restringir a pasta OnLine eu criei outro arquivo Web.Config (Listagem 3), onde somente usuários logados possuem acesso.

 

<?xml version="1.0"?>

<configuration>

  <system.web>

    <authorization>

      <deny users="?"/>

    </authorization>

  </system.web>

</configuration>

Listam 3 – Web.Config na pasta OnLine

 

 

Um configuração que não posso deixar de fazer é configurar o arquivo Web.Config que fica na raiz da aplicação, caso contrário ele irá ler o  Provider padrão do Framework (Figura 7).

 

 

Figura 7 – Arquivo Machine.config

 

 

Na (Listagem 4) a configuração do arquivo Web.Config. Repare que no defaultProvider eu informo o nome das classes criadas.

  

<membership defaultProvider="MyCustomMembershipProvider">

       <providers>

          <add connectionStringName="ConnectionString" passwordFormat="Hashed"

             minRequiredPasswordLength="2" minRequiredNonalphanumericCharacters="0"

             requiresQuestionAndAnswer="False" requiresUniqueEmail="True"

             name="MyCustomMembershipProvider" type="MyCustomMembershipProvider" />

       </providers>

    </membership>

 

 

    <roleManager defaultProvider="MyCustomRoleProvider"

     enabled="true"

     cacheRolesInCookie="true"

     cookieName=".ASPROLES"

     cookieTimeout="30"

     cookiePath="/"

     cookieRequireSSL="false"

     cookieSlidingExpiration="true"

     cookieProtection="All" >

      <providers>

        <clear />

        <add

          name="MyCustomRoleProvider"

          type="Samples.AspNet.Roles.MyCustomRoleProvider"

          connectionStringName="ConnectionString"

          applicationName="SampleApplication"

          />

      </providers>

    </roleManager>

Listam 4 – Web.Config

 

Neste momento, com o arquivo Web.Config configurado e as classe criadas eu posso criar os usuários e fazer login na aplicação (Figura 8).

 

Figura 8 – Login

 

  

Se eu logar com o usuário galante que é admin terei acesso ao arquivo Default.aspx que fica na pasta OnLine. (Figura 9).

 

 

Figura 9 – Usuário galante (admin)

 

Usuário autenticado (Figura 10).

 

 

Figura 10 – Usuário rita (autenticado)

 

 

 

Neste artigo demonstrei como você pode customizar sua aplicação utilizando as classes Membership e Roles de acordo com a necessidade do cliente.

 

 

Clique aqui para fazer fazer o download do código fonte e estudar como foi criado o projeto.

 

Download: http://www.aspneti.com/galante/fonteCustomProvider.zip

 

 

Abraços e até o próximo.

 

Fábio Galante Mans

fgamans@aspneti.com.br

www.aspneti.com – community.net

 

 

voltar   comente  subir

Download Copy





 
Mauricio Junior Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog: blog.mauriciojunior.org, Site pessoal www.mauriciojunior.org



Comentários:

Comentado por: Gerson - 26/10/2007 19:31:26
Fantastico Fábio parabens!
Comentado por: Ramon - 11/9/2008 0:00:00
Muito bom o artigo!,Os artigo do Mans são muito bons, parabens!
Comentado por: Marcelo - 27/11/2008 0:00:00
Como faço para esse sistema de login funcionar com um banco de dados em ".mdb"
Comentado por: Daniel - 25/2/2009 0:00:00
Ótimo o Artigo. Tem como posta tb o BD ou script do BD.
Agradeço a ajuda
Comentado por: Daniel - 25/2/2009 0:00:00
Ótimo o Artigo. Tem como posta tb o BD ou script do BD.
Agradeço a ajuda
Comentado por: Roberto - 19/6/2009 0:00:00
P***A AMO ESSE SITE
Comentado por: Emerson Jose - 27/7/2009 0:00:00
Tenho uma duvida eu só iniciante no DotNet, queria saber se a vez de usar um banco de dados SQL, posso usar um Access ?
Comentado por: Mauricio Junior - 5/2/2010 0:00:00
Emerson, é bom utilizar sql server porque é mais robusto, utiliza stored procedure, possui mais segurança, não tem como fazer download dele como o access caso o usuário descubra o caminho do mdb. Fora que você tem que analisar a sua solução se precisa de uma estrutura boa ou apenas um access.

No sql server, você tem também backup diário, trigger, view e muitos outros recursos ótimos.

Comente (dê sua opinião):

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Microsoft® Expression® Web
Java J2EE – Primeiro Passo
Visual Studio Toolbox Performance
Multimídia C#.NET
Windows Phone 7 Series Developer Training Kit
Windows Phone 7 e DLNA
E-mail Carta de Amor - Vírus
HTC x LG x Samsung com Windows Phone 7
Adicionando Valores no ComboBox
Código fonte aberto
Sistema de Catalogar Livros
Convertendo String para Guid
Desktop Linux Ubuntu
Microsoft Recite
Desenvolvendo software com qualidade
Lendo Arquivo txt usando Visual Studio.NET 2005
IsData
CSS no VS 2003
Sistema de Login em ASP – Parte X
Trabalhando com diretório e arquivo
Torne-se Autor de Artigos
Criando RSS
Utilizando o GridView e DetailsView
Padronizando Status e Situação
Agrupar Email no Mail - MacBook
Organizando o projeto em camada
GridView Parte II
Vídeo - Microsoft Surface: The Power
Vídeo - Sistema de Atendimento de Clientes
ModalDialogExtender
Ebook: Desenvolvendo WebServices
Sistema iGas - Controle de Gasolina
Dica Importante SQL Server 2008 Management Studio
O vírus do curriculum
UPLOAD – Enviando imagem pela Internet




eCode10 Magazine 4 Edição

Baixe a sua sem pagar nada, basta apenas ter um cadastro na comunidade aspneti.com ou ser usuário do ecode10.com.



Edições anteriores
LAYERDEV

Notícias *

Notebook 3D ou 4K?

Notebook vem com tudo...

Visão do Futuro - Day of Glass 2

Futuro próximo pode chegar cedo?...

Lenovo de 14 polegadas IdeaPad

Veja o novo notebook Lenovo IdeaPad...

Windows 8 Store

Channel9 publica um vídeo da Windows Store...

Sony Vaio série Z

Novo Vaio Ultrabook? ou não Ultrabook?...

Samsung quer comprar RIM

Imagine se juntar as duas companhias...

Surface 2.0 mostrado

Novo Surface é mostrado de forma incrível...

Skype Tablet

Será que esse skype tablet pega mesmo?...

Lenovo e o seu novo Ultrabook

Ultrabook chega também pela Lenovo...




NETITC