Sei sulla pagina 1di 15

ASP .

NET - Autenticao de usurios - I


A ASP .NET possui recursos embutidos que podemos usar para definir a autenticao de usurios em aplicaes Web. O conjunto dos novos
recursos (desde a verso 2.0) chamados provedores faz parte da nova arquitetura chamada Provider Model onde os providers so componentes que fornecem servios configurveis idnticos aos plug-ins. Os providers Roles e MemberShip fornecem os recursos para gerenciar a autenticao e autorizao. Onde a autenticao o processo para verificar a identidade do usurio e a autorizao refere-se ao gerenciamento das permisses dos usurios. Nas referncias deste artigo voc encontra alguns dos artigo onde eu j tratei do assunto usando os providers e o membership da ASP .NET. Neste artigo eu pretendo mostrar como voc mesmo pode implementar a autenticao de usurios em seu site ASP .NET. Vou comear definindo o cenrio no qual vamos trabalhar: Iremos implementar a autenticao de usurios em uma escola onde deveremos definir as permisses de acesso as pginas para os perfis de Administrator, Diretor, Professor e Aluno. Vamos usar os recursos da orientao a objetos e definir em um projeto Class Library uma classe base onde iremos implementar as funcionalidades pertinentes ao processo de autenticao. Deveremos tambm implementar as funcionalidades que permitem realizar a manuteno dos usurios. Os recursos usados neste projeto sero: 1. 2. 3. 4. Visual Web Developer 2010 Express Edition Linguagem VB .NET SQL Server 2008 Express Edition SQL Server Management Studio 2008 Express Edition (SSMS)

Todos os recursos usados so gratuitos.

Criando o banco de dados e a tabela da aplicao


Abra o Visual SQL Server Management Studio e clique com o boto direito do mouse sobre o item Banco de dados (DataBase) e selecione Novo Banco de dados (New DataBase) :

Obs: As mensagens do meu SSMS esto em portugus pois eu apliquei o pacote de localizao

A seguir informe o nome do banco de dados Escola e clique no boto OK para criar o banco de dados Escola.mdf.

Expanda os itens do banco de dados e clique com o boto direito do mouse sobre o item Tabelas e a seguir em Nova Tabela:

A seguir defina a estrutura da tabela Usuarios conforme a figura abaixo onde temos os campos: id, login,senha, ativo,permissao e email. Sendo que o campo id uma chave primria do tipo identity.

Agora temos que definir uma stored procedure no banco de dados Escola que dever realizar a autenticao do usurio verificando se o login e a senha do usurio esto cadastrados na tabela Usuarios. Expanda o item Programao do banco de dados Escola e clique com o boto direito do mouse sobre o item Procedimentos Armazenados e a seguir em Novo Procedimento Armazenado...

A seguir digite o cdigo que define a criao da stored procedure (CREATE PROCEDURE) com o nome Autenticacao e utiliza os parmetros @login e @senha e utiliza a instruo SQL SELECT:

Assim j temos o banco de dados Escola e a tabela Usuarios criados e prontos para uso. Agora vamos incluir alguns registros na tabela Usuarios e para isso vamos usar a instruo SQL INSERT INTO Abaixo um exemplo que inclui um usurio com permisso deAdministrador. (para as demais permisses basta alterar a permisso e o login) INSERT INTO [Escola].[dbo].[Usuarios] ([login] ,[senha] ,[ativo] ,[permissao] ,[email]) VALUES ('admin' ,'123456' ,1 ,1 ,'admin@bol.com.br') GO

Ao final deveremos ter a tabela com os seguintes valores:

Iremos usar esses valores para testar o nosso projeto.

Definindo o projeto ASP .NET


Abra o Visual Web Developer 2010 Express e no menu File clique em New Project; A seguir selecione a linguagem Visual Basic e o template Web e a seguir clique em ASP .NET Web Application informando o nome EscolaNet e clique no boto OK;

O template ASP .NET Web Application cria um projeto com uma estrutura definida que usa uma master page e algumas definies para conta de usurio que iremos remover deixando somente as pginas ASP .NET. A seguir no menu File clique em Add -> New Project e selecione os templates Visual Basic -> Windows e Class Library informando o no me EscolaNet.Seguranca e clique no boto OK;

Teremos assim uma soluo contendo dois projetos: EscolaNet e EscolaNet.Seguranca

Vamos definir o cdigo do projeto EscolaNet.Seguranca Renomeia o arquivo Class1.vb para Usuario.vb e defina neste arquivo o cdigo abaixo: Public Class Usuario Public Enum Permissoes Administrador = 1 Diretor = 2 Professor = 3 Aluno = 4 End Enum Public Property ID() As Integer Get Return m_id End Get Set(ByVal value As Integer) No arquivo Usuario.vb estamos definindo 5 propriedades: 1. ID 2. Login 3. Senha 4. Ativo 5. Permissao 6. Email que representam um usurio do nosso domnio e cujas informaes sero persistidas na tabela Usuarios Eu no vou implementar outros mtodos como Salvar,Excluir,

m_id = value End Set End Property Private m_id As Integer Public Property Login() As String Get Return m_login End Get Set(ByVal value As String) m_login = value End Set End Property Private m_login As String Public Property Senha() As String Get Return m_senha End Get Set(ByVal value As String) m_senha = value End Set End Property Private m_senha As String Public Property Ativo() As Boolean Get Return m_ativo End Get Set(ByVal value As Boolean) m_ativo = value End Set End Property Private m_ativo As Boolean Public Property Permissao() As Permissoes Get Return m_Permissao End Get Set(ByVal value As Permissoes) m_Permissao = value End Set End Property Private m_Permissao As

etc. por questo de simplicidade e para focar somente na autenticao do usurio. Definimos tambm uma enumerao para as permisses com os seguintes valores: Administrador = 1 Diretor = 2 Professor = 3 Aluno = 4

Permissoes Public Property Email() As String Get Return m_email End Get Set(ByVal value As String) m_email = value End Set End Property Private m_email As String End Class A seguir vamos incluir outra classe no projeto via menu Project -> Add Class com o nome Autentica.vb e inserir nesta classe o cdigo a seguir:
Imports Imports Imports Imports Imports System.Data; System.Data.SqlClient System.Configuration System.Collections.Generic System.Web

Public Class Autentica Inherits System.Web.UI.Page Public Enum Permissoes Administrador = 1 Diretor = 2 Professor = 3 Aluno = 4 End Enum Public Property usuario() As Usuario Get Return TryCast(HttpContext.Current.Session("Usuario"), Usuario) End Get Set(ByVal value As Usuario) HttpContext.Current.Session("Usuario") = value End Set End Property Public Sub New() End Sub Protected Overrides Sub OnLoad(ByVal e As EventArgs) If Me.Usuario Is Nothing Then Me.Redireciona() Else() MyBase.OnLoad(e) End If End Sub

Public Function Login(ByVal _login As String, ByVal _senha As String) As Boolean Dim conexao As New SqlConnection(ConfigurationManager.ConnectionStrings("Escola").ConnectionString) Dim comando As New SqlCommand("Autenticacao", conexao) Dim leitor As SqlDataReader comando.CommandType = CommandType.StoredProcedure comando.Parameters.Add(New SqlParameter("@login", _login)) comando.Parameters.Add(New SqlParameter("@senha", _senha)) Try conexao.Open() leitor = comando.ExecuteReader() If leitor.HasRows Then Me.usuario = New Usuario() With { _ .ID = Integer.Parse(leitor("id").ToString()), _ .Login = _login, _ .Senha = _senha, _ .Ativo = leitor("ativo").ToString() <> "0", _ .Permissao = DirectCast(Integer.Parse(leitor("permissao").ToString()), Permissoes) _ } Else Me.usuario = Nothing leitor.Close() End If Catch generatedExceptionName As Exception Throw Finally conexao.Close() End Try Return Me.usuario IsNot Nothing End Function Public Sub Logoff() Me.usuario = Nothing Me.Redireciona() End Sub Public Sub Redireciona() If Me.Usuario Is Nothing Then HttpContext.Current.Response.Redirect("~/Login.aspx") End If 'H implementar ' If Not Me.Usuario.Ativo Then ' HttpContext.Current.Response.Redirect("~/AtivaUsuario.aspx") ' End If Select Case Me.Usuario.Permissao Case Permissoes.Aluno HttpContext.Current.Response.Redirect("~/Alunos.aspx") Exit Select

Case Permissoes.Administrador HttpContext.Current.Response.Redirect("~/Admin.aspx") Exit Select Case Permissoes.Diretor HttpContext.Current.Response.Redirect("~/Diretoria.aspx") Exit Select Case Permissoes.Professor HttpContext.Current.Response.Redirect("~/Professores.aspx") Exit Select End Select End Sub End Class

No cdigo desta classe temos o seguinte:


uma enumerao que define a escala de permisses; uma propriedade que obtm o valor do objeto Usuario da sesso; estamos sobrescrevendo mtodo Onload redirecionando o usurio ou executando o mtodo OnLoad da classe base; o mtodo Login que autentica o usurio e verifica suas permisses; o mtodo Redireciona que conforme a permisso do usurio o redireciona para a pgina apropriada;

Estamos usando a classe HttpContext que engloba todas as informaes especficas de uma requisio HTTP. O objeto HttpContext da requisio HTTP (do namespace System.Web) atual fornece acesso aos objetos intrnsecos Request , Response e Server para a requisio. Agora abra o arquivo Web.Config e defina o cdigo na pgina configurando a string de conexo ............. <connectionStrings> <add name="Escola" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Escola;Integrated Security= True" providerName="System.Data.SqlClient" /> </connectionStrings> ....................... Dessa forma estamos prontos para definir as pginas do projeto e acessar o banco de dados e a tabela Usuarios. Aguarde a segunda parte do artigo: ASP .NET - Autenticao de usurios -

II

Potrebbero piacerti anche