Desenvolvimento - ASP. NET
Autenticando usuários com diferentes níveis de acesso usando FORMS AUTHENTICATION
Artigo interessante (mais uma abordagem) sobre como fazer o login de um usuário e redirecioná-lo de acordo com seu perfil no sistema.
por Bruno Peres Orcajo
Silvio Assunção Junior - assuncao.s@gmail.com
Desenvolvedor .NET C# da ArchITettura Soluções em Tecnologia.
Desenvolvedor em aplicativos web e Windows usando tecnologia .net e Delphi.
Softwares:
Visual Studio, SQLServer.
Cenário
Exemplo:
Temos uma aplicação que vamos dividir em áreas, área comum a todos os usuários, uma área restrita para clientes e uma área restrita para administradores.
Temos uma tabela de usuários, e nesta tabela cadastramos para cada usuário um perfil (Admistrador "A" ou Cliente "C") para validarmos depois.
Criando a Tabela no SQLServer
Vamos inicialmente criar uma base de dados, chamada APLICACAO_FORMSAUTHENTICATION
Vamos criar uma tabela chamada USUARIOS com os seguintes campos:
NM_USUARIO: Nome do usuário
DS_LOGIN: Login do usuário
DS_SENHA: Senha do usuário(com 32 bits, caso queira usar a senha criptografada com MD5*)
* MD5 - Nativo do framework para encriptação.
DS_PERMISSAO: Neste campo vamos definir "A" para administradores ou "C" para clientes.
Com a base pronta e a tabela você pode inserir manualmente alguns registro para testes:
Criando a Solução no Visual Studio
Vamos criar agora uma solução no Visual Studio, usando C#> ASP.NET Web Application
Para criar a solução: File> New> Blank Solution...
Vamos chamar a Solução de formsAuthentication
Criando os diretórios e arquivos iniciais
Vamos criar dois diretórios(pastas), um chamado "Administracao" e um chamado "Cliente", com uma página Default em cada diretório, onde somente administradores acessam a página Default do diretório Administracao e os clientes acessam a página Default do diretório Cliente, e restando os usuários sem autenticação acessam apenas os arquivos na raiz /.
Alterando o web.config
Primeiramente vamos configurar o web.config para forms authentication e definir os acessos dos usuários.
No elemento authentication modifique para:
Elemento Authentication
Atributos | Descrição |
Name | Nome do Cookie |
Path | Caminho para salvar o Cookie |
LoginUrl | URL da página de Login, para validar o usuário |
Protection | Método para criptografar o cookie, default é All |
Timeout | Número em minutos para expirer o Cookie |
Estes são os atributos possíveis de usar no elemento Authentication, contudo só vamos usar o loginUrl.
Após o fechamento da Elemento system.web "</system.web>" coloque as seguintes Elementos:
<!-- Definindo diretórios autorizados para grupo de usuários clientes --> <location path="Cliente"> <system.web> <authorization> <allow users="C" /> <deny users="*" /> </authorization> </system.web> </location> <!-- Definindo diretórios autorizados para grupo de usuários administradores --> <location path="Administracao"> <system.web> <authorization> <allow users="A" /> <deny users="*" /> </authorization> </system.web> </location>
Elemento Location
Atributos | Descrição |
Path | Diretório ou arquivo a ser autenticada. |
allowOverride | Sobrescreve as configurações dos web.config dos filhos caso exista, default é true. |
Estes são os atributos possíveis de usar no elemento Authentication, contudo só vamos usar o Path.
Criando a página de login
Vamos criar a página de login para validar o usuário, crie o arquivo Login.aspx na raiz do projeto:
Vamos criar o design, colocando dois campos, um para login e outro para senha e um botão para validar:
Nome dos componentes:
TextBox do Login: txtLogin
TextBox da Senha: txtSenha
Botão Validar: btnValidar
Vamos fazer a conexão direto na camada do front, mas isto não é recomendável, o certo é programar em camadas onde haveria uma camada de acesso a dados, contudo o intuito deste tutorial é mostrar o uso de forms authentication. Criando a conexão (ainda na página de login)
Arraste para a tela um SQLDataAdapter
Clique em next ...
Clique em New Connection e faça a sua string de conexão local na base APLICACAO_FORMSAUTHENTICATION.
Escolha a primeira opção, pois não vamos utilizar procedures e clique em next ...
Clique no botão Advanced Option…
Desmarque a primeira opção pois só vamos fazer consulta nos dados e não vamos alterá-los. Clique em Ok.
Clique em Query Builder e adicione a tabela de USUÁRIOS, escolha todas as colunas(All Columns).
Coloque em Criteria do campo DS_LOGIN: = @login (são variáveis que vamos passar)
Coloque em Criteria do campo DS_SENHA: = @senha (são variáveis que vamos passar)
Clique em Ok > Next > Finish.
Vamos renomear o dataAdapter para DAT_USUARIOS e a conexão para CNX.
Agora clique com o botão direito em cima do DAT_USUARIOS(DataAdapter) e clique em Generate Dataset... para gerarmos um dataset tipado. Vamos chamá-lo de DataSetUsuário.
O Visual Studio vai criar automaticamente um DataSetUsuarios1 na tela, renomeie para dsUsuario.
Agora vamos para o código (página de login):
#region Events private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } private void Button1_Click(object sender, System.EventArgs e) { //Chama o método que valida o login efetuaLogin(); } #endregion #region Methods private void efetuaLogin() { //Carrega o dataSetUsuarios carregaDataSetUsuarios(); //Valida se o dsUsuarios está preenchido, se ele achou o usuário if(dsUsuario.USUARIOS.Rows.Count > 0) //Caso encontrou, chama a função de logar usuário logaUsuario(); else { //Senão mostra a mensagem javascript de login ou senha inválidos string mensagemAlert = "Usuário ou senha inválidos"; Page.RegisterStartupScript("alerta",mensagemAlert); } } private void carregaDataSetUsuarios() { //Passa os parametros para o dataAdapter dos TextBox DAT_USUARIOS.SelectCommand.Parameters["DS_LOGIN"].Value = txtLogin.Text; DAT_USUARIOS.SelectCommand.Parameters["DS_SENHA"].Value = txtSenha.Text; //Carrega o Dataset DAT_USUARIOS.Fill(dsUsuario); } private void logaUsuario() { //Autentica o usuário System.Web.Security.FormsAuthentication.RedirectFromLoginPage(dsUsuario.USUARIOS[0].DS_PERMISSAO, false); } #endregion
Criando a página Home na raiz /
Crie apenas dois links, um para Cliente e outro para Administrador para simular um acesso sem login e senha:
Ao clicar no link você será redirecionado para a página de login, pois seu usuário não tem acesso e depois que você logar terá acesso a um dos diretórios, dependendo do usuário e senha. Após o login correto o usuário é redirecionado para a página que ele tentou acessar.
Obrigado e espero que seja útil.