Busca Online:
 

Seja bem vindo(a) Visitante, voc no est logado deseja logar
na comunidade ASPNETi.COM e participar de servios e promoes ? clique aqui.

Customizando o Membership e Role Provider



Data Publicação: 7/3/2007 17:06:11
Total de visualizações: 13558

comente
Diminuir o tamanho das letras Aumentar o tamanho das letras


 

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

 

 



Total de visualizações: 13558
voltar   comente  subir


Comentários:

Comentado por: Gerson - 26/10/2007 19:31:26
Fantastico Fábio parabens!
Comentado por: Carlos - 28/12/2007 8:59:11
Muito bom.
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): VOCÊ PRECISA LOGAR

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

Trabalhando com GridView, RowCommand e DataKeysNames
GridView Parte I
Java J2EE – Primeiro Passo
Tópicos: Criptografia de Dados
Microsoft confirma Windows Phone 7 com Asus, Dell, HTC, LG e Samsung
Como fazer uma enquete - parte 1
Escrever log de erro e warning
Membership
Forum utilizando VS 2005 e Ajax
Vídeo - Ler EventLog do Windows usando C#.NET
Ext JS
Organizando o projeto em camada
Mensagem JavaScript com .NET
Problemas na acentuação
Definindo o botão padrão.
Estatística - Browser de Acesso
Importação e Comunicação entre Sistemas
Visual Studio 2010 Beta 2
Customizando o Membership e Role Provider
Internet Explorer 8
Java J2EE – Segundo Passo
Usando Tooltip
Agrupar Email no Mail - MacBook
Ebook Grátis Microsoft
XmlDataSource
Programando em Windows Forms e abrindo na web
Resource e Internacionalização – Parte V Usando Visual Studio.NET 2005
ASP.NET 4.0 and Visual Studio 2010 Web Development Beta 2 Overview
Sistema em ASP 3.0 utilizando 3 camadas – Parte 3
Terra TV Disponibiliza Vídeos com Silverlight
ASP.NET 2.0 - FileUpload
Comando para compilação .NET
Confira os 5 primeiros ganhadores da promoção assinatura online grátis DEVMEDIA.COM e ASPNETI.COM
Adicionando Valores no ComboBox
Seria o novo Windows Mobile 7 ?
Sobre o Autor
  [sumir] [aparecer]
 
Mauricio Junior Maurício Júnior
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 27 anos e possuo sete livros publicados pela editora Ciência Moderna no ano de 2009. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.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.orgSite pessoal  www.mauriciojunior.org

Informaes Online
Usurios Online: 393
Artigos:  750
Vdeos:  61
PodCast's:  44
Frum:  3128
Empregos:  1385
Usurios Cadastrados: 6163
Publicidade
LAYERDEV




Vdeos Publicados
 

Duas dicas de internet - Google RealTime e OpenDNS

Desconfie sempre da internet e emails

Microsoft Office online no Safari funcionando

Inovação Visual Studio .NET 2010 - parte 4

Office Live online

TAB TAB na ferramenta Visual Studio .NET

Apresentação do IMC - Sistema de Controle de Peso Mobile

Inovação Visual Studio .NET 2010 - parte 3

Inovação Visual Studio .NET 2010 - parte 1

Download de vídeos com o Safari

Criando Chart - Novo componente integrado com o Visual Studio.NET 2010

Serviços: SAC e SMS integrado

Café com TI - Info sobre o Visual Studio.NET 2010 - WebConfig

Café com TI - Info sobre o Visual Studio.NET 2010

Café com TI - Vírus se passando por Correios

Café com TI - Novo jeito de mandar e-mail com vírus

Café com TI - Formatando todo tipo de String

Resolvido erro do Banco do Brasil no browser

Erro no site do Banco do Brasil com o Safari

Duas dicas do Snow Leopard

Incompatibilidade no Snow Leopard

E-mail com vírus, veja os detalhes

Café com TI - Continuando a configuração de Themes no site

Café com Ti - Banner Rotativo

Café com TI - Evento Eco Brasília

Café com TI - Themes dentro do ASPNETi.COM

Café com TI - Trabalhando com o iCal no Macbook

Café com TI - Deixando o rodapé do seu site fixo

Café com TI - Windows 7 sendo utilizado sem qualquer incompatibilidade

Café com Ti - ASP.NET - Explicando o componente ModalDialogExtender do Ajax Toolkit

Café com TI - Indexação de URL com ASP.NET

Café com TI - Configurando Mail para sua conta no HotMail
Enquete ASPNETi.COM
 Os podcasts tem sido proveitoso pra você?

Favor logar para votar
 
Publicidade Vertical
NETITC