ASP.NET 2.0 - Acesssando Membership e Roles via código
Os recursos MemberShip e Roles (Perfis) são implementados através de uma série de classes do .NET Framerwork e você pode acessar essas classes para ler e definir propriedades e chamar métodos em seu código se você necessitar complementar as funcionalidades oferecidas pela ASP.NET para membership e roles. As classes principais são:
Vamos dar uma olhada nos principais membros de cada uma destas classes para lhe dar uma idéia do tipo de tarefas que você pode realizar via código.
A classe Membership expõe um conjunto de propriedades estáticas que fazer referência ao usuário atualmente logado. Estas propriedades são as mesmas que você visualizar no arquivo machine.config que controla como o sistema membership se comporta. Ele inclui propriedades como : EnablePasswordReset, EnablePassword Retrieval, MinRequiredPasswordLength e RequiresQuestionAnd Answer.
Existem diversos métodos que permitem que você obtenha informação e manipule o usuário atual e também que você obtenha informações sobre outros usuários.
A seguir temos uma relação dos principais métodos para membership:
Nome | Descrição |
CreateUser | Overloaded. Inclui um novo usuário no banco de dados. |
DeleteUser | Overloaded. Deleta um usuário do banco de dados |
Equals | Overloaded. Determina se duas instâncias de objetos são iguais. |
FindUsersByEmail | Overloaded. Obtêm uma coleção de usuários membership usando o e-mail como critério de busca. |
FindUsersByName | Overloaded. Obtêm uma coleção de usuários membership usando o nome como critério de busca. |
GeneratePassword | Gera uma senha aleatória de um tamanho definido |
GetAllUsers | Obtêm uma coleção de usuários do banco de dados. |
GetNumberOfUsersOnline | Obtêm o número de usuários atualmente acessando a aplicação. |
GetType | Obtêm o tipo da instância atual. |
GetUser | Obtêm a informação para o usuário membership da fonte de dados |
GetUserNameByEmail | Obtêm o nome do usuário usando o e-mail como critério de busca. |
UpdateUser | Atualiza o banco de dados com as informações o usuário especificado. |
ValidateUser | Verifica se o nome do usuário e a senha fornecidas são válidos. |
A seguir temos como você pode usar alguns destes métodos:
Você pode criar e deletar um usuário usando os métodos CreateUser e DeleteUser que fornecem diversos métodos sobrecarregados.
Exemplos:
Membership.CreateUser(user-name, password) Membership.CreateUser(user-name, password, email) Membership.DeleteUser(name)
b)Obter uma referência ao usuário
Você pode obter uma referência a um usuário como uma instância de um MemberShipUser usando um dos métodos sobrecarregados de GetUser. Definindo o parâmetro is-online como true indica que a propriedade LastAtctivity esta atualizada no sistema membership também:
MembershipUser thisUser = Membership.GetUser() MembershipUser thisUser = Membership.GetUser(user-name) MembershipUser thisUser = Membership.GetUser(is-online) MembershipUser thisUser = Membership.GetUser(user-name, is-online)
c)Encontrando ou obtendo uma lista de usuários
Para encontrar usuário por nome ou por endereço de e-mail ou para obter uma lista de todos os usuário você pode usar um dos seguintes métodos.
MembershipUserCollection list = Membership.FindUsersByName(user-name) MembershipUserCollection list = Membership.FindUsersByEmail(email) MembershipUserCollection list = Membership.GetAllUsers()
Todos retornam uma instância da coleção MemberShipUser, a qual você pode percorrer para obter uma referência para cada instância de MembershipUser ou vincular diretamente a um controle de lista para exibir os detalhes do usuário.
d)Obtendo o nome do usuário a partir do endereço de e-mail
Para obter o nome do usuário a partir do seu e-mail usamos:
String username = Membership.GetUserNameByEmail(email)
e)Determinando o número de usuários Online
Se você deseja conhecer quantos usuários estão on-line você pode usar o seguinte método: Dim contador as integer = Membership.GetNumberOfUsersOnline()
O evento Membership
Existe um evento disparado pela classe MemberShip que ocorre quando o usuário atual é criado ou a sua senha é alterada ou resetada.
O evento ValidatingPassword passa para o manipulador de eventos uma instância da classe ValidatePasswordEventArgs a qual expõe propriedades que indicam o nome do usuário , a nova senha , se é uma nova conta, informação sobre por que a atualização falhou , e um parâmetro Cancel que você pode definir como true para evitar que a atualização seja efetivada.
a) Validando um usuário
Abaixo temos um trecho de código usando a classe Membership que verifica se o nome do usuário e a senha são válidas, se issso ocorrer é usado o método RedirectFromLoginPage da classe FormsAuthentication para redirecionar o usuário para a próxima página. Se a autenticação falhar o código exibe a mensagem de
If
Membership.ValidateUser(username, password) Then |
A classe MembershipUser
A classe MembershipUser representa um usuário do sistema membership obtido a partir de um dos métodos fornecidos pela classes MemberShip.
Ele expõe propriedades que você pode ler ou definir para atualizar este usuário. A propriedade names inclui :LastLogin Date, CreationDate, LastActivityDate, LastPasswordChangedDate, Email, IsApproved, PasswordQuestion, e UserName.
Depois que você atualiza uma destas propriedades você precisa chamar o método estático UpdateUser da classe Membership para devolver as alterações ao sistema Membership. Isto significa que atualizar diversas propriedades requer somente uma chamada ao banco de dados para realizar a atualização.
Membership.UpdateUser(this-user)
Vejamos os principais:
Para obter a senha de um usuário , de forma que você possa realizar uma validação personalizada, use um dos métodos sobrecarregados GetPassword dependendo se o sistema membership esta configurado para requisitar usuários para fornecer uma questão e resposta de segurança
Dim password as String = this-user.GetPassword() Dim password as String = this-user.GetPassword(answer)
Para mudar a senha do usuário , chame o método ChangePassword :
Dim worked as Boolean = this-user.ChangePassword(oldPassword, newPassword)
c-) Questão e resposta de segurança
Existe também um método para alterar a pergunta e resposta de segurança para um usuário:
Dim worked as Boolean = this-user.ChangePasswordQuestionAndAnswer(password,question, answer)
Finalmente para resetar a senha quanto ela não puder ser retornada (quando EnablePasswordReset for true e EnablePasswordRetrieval for false) use o método ResetPassword que retorna uma nova senha gerada de forma aleatório:
Dim newPassword as String = this-user.ResetPassword() Dim newPassword as String = this-user.ResetPassword(answer)
A classe Roles
A classe Roles fornece métodos que você pode usar para modificar os perfis em sua aplicação, obter informação sobre quais usuário estão em um perfil , incluir usuário em um perfil e remover usuários de um perfil.
Para criar ou deletar perfis você usa os métodos CreateRole e DeleteRole:
Roles.CreateRole(role-name) Roles.DeleteRole(role-name)
Para obter uma lista dos nomes dos perfis você pode usar diversos métodos. Se você não especificar o nome de um usuário para o método GetreolsForUser ele assume o usuário atual. Será retornado um array de strings contendo os nomes dos perfis:
Dim role-names() As String = Roles.GetAllRoles() Dim role-names() As String = Roles.GetRolesForUser() Dim role-names() As String = Roles.GetRolesForUser(user-name) Dim user-names() As String = Roles.GetUsersInRole(role-name) Dim user-names() As String = Roles.FindUsersInRole(role-name,user-name) c-) Verificar se um usuário pertence a um perfil
Para verificar se o usuário pertence a um perfil , você usa o método IsUserInrole. Se você não informar o nome do usuário o método assume o usuário atual:
Dim result as Boolean = Roles.IsUserInRole(role-name) Dim result as Boolean = Roles.IsUserInRole(user-name, role-name)
Você pode incluir usuários aos perfis definidos usando o método AddUser(s)ToRole(s). O relacionamento entre usuários e perfis é do tipo muitos-para-muitos, no qual um usuário pode estar em mais de um perfil, e um perfil pode conter mais que um usuário. Assim , existem métodos que usam um nome único ou um array de nomes de usuários e/ou nome de perfis:
Roles.AddUserToRole(user-name, role-name)
Roles.AddUserToRoles(user-name, role-names())
Roles.AddUsersToRole(user-names(), role-name)
Roles.AddUsersToRoles(user-names(), role-names())
Para remover usuários de perfis , você usa o método RemoveUser(s)FromRole:
Roles.RemoveUserFromRole(user-name, role-name)
Roles.RemoveUserFromRoles(user-name, role-names())
Roles.RemoveUsersFromRole(user-names(), role-name)
Roles.RemoveUsersFromRoles(user-names(), role-names())
Em um próximo artigo veremos toda essa teoria posta para funcionar em um exemplo prático.
Veja também o artigo : VB.NET 2005 - Usando MemberShip e Roles em uma aplicação Windows Forms
Até o próximo artigo...
José Carlos Macoratti