• [转]Membership、MembershipUser和Roles类


    Membership、MembershipUser和Roles类  

    第一部分

    用户与角色管理在asp.net2.0中是通过Membership和Roles两个类来实现的。

    Membership:用户成员账号管理,用户名、密码、邮箱等

    Roles:负责用户和群组之间关系管理。

    l          Membership类:主要是创建用户帐号、验证用户身份和管理用户设置

    属性:

    1)         EnablePasswordReset:获取一个值,以指示是否可以重置密码。

    2)         EnablePasswordRetrieval:获取一个值,以指示是否允许用户提取密码。

    3)         HashAlgorithmType:获取一个值,密码的算法识别项

    4)         MaxInvalidPasswordAttempts:获取一个值,锁定用户之间所允许的重试次数。

    5)         MinRequiredNonAlphanumericCharacters:获取一个值,密码中最少的特殊字符数。

    6)         MinRequiredPasswordLength:取得最小密码的长度

    7)         RequiresQuestionAndAnswer:获取一个值,指示是否要求用户解答密码问题以重新提取密码。

    8)         UserIsOnlineTimeWindow:指定用户最后活动日期之后的分钟数,其间的用户视为在线。

    方法:

    1)         CreateUser():创建新的用户

    2)         DeleteUser():从数据库删除用户

    3)         GetUser():取得成员资格用户的信息

    4)         UpdateUser():更新用户信息

    5)         ValidateUser():验证用户账号与密码是否用效

    6)         GetAllUsers():取得数据库中用户的集合

    7)         FindUsersByEmail():根据email查询用户

    8)         FinndUsersByName():根据帐号名称查询用户

    9)         GetNumberOfUsersOnline():取得目前访问程序的在线用户

    10)      GetUserNameByEmail():根据邮箱查询用户名

    l          MembershipUser类

    负责管理与更新Membership表中的相关资料。别把MembershipUser类与Membership类混了,实际上是同MembershipUser处理完成后交由Membership处理。如:

    1)         取得或设置用户相关信息。如UserName,Email和帐号创建时间。

    2)         读取、改变用户密码

    3)         改变密码提示问题与答案

    4)         解锁帐号

    5)         设置是否允许用户能够被验证

    属性:

    1)         CreationDate:取得用户的创建时间

    2)         Email:取得或设置用户的电子邮件地址

    3)         IsApproved:取得或设置用户是否可以进行验证

    4)         IsLockedOut:取出用户是否被锁定

    5)         IsOnLine:指出用户目前是否在线

    6)         LastActivityDate:取得或设置用户最后一次验证或访问程序的日期时间

    7)         LastLoclkoutDate:取是最近锁定用户的日期和时间

    8)         LastLoginDate:取得或设置用户上一次验证的日期时间

    9)         LastPasswordChangedDate:取得用户密码上一次更新的时间

    10)      PasswordQuestion:取得用户的安全密码的问题

    11)      UserName:取得用户登录的名称

    方法:

    12)      ChangePassword():更改用户密码

    13)      ChangePasswordQuestionAndAnswer:更改用户的密码安全问题和解答

    14)      GetPassword():取得用户密码

    15)      ResetPassword():将用户的密码重置,并自动产生新密码

    16)      UnlockUser():解除帐号锁定,以便能进行身份验证


    l          Roles类

    方法:

    1)         AddUsersToRole():将多个用户加入一个角色

    2)         AddUsersToRoles():将多个用户加入多个角色

    3)         AddUserToRole():将一个用户加入一个角色

    4)         AddUserToRoles():将一个用户加入多个角色

    5)         CreateRole():创建角色

    6)         DeleteRole():删除角色

    7)         FindUsersInRole():寻找某个角色中的所有用户

    8)         GetAllRoles():取得所有角色的清单

    9)         GetRolesForUser():取得用户所属角色的清单

    10)      IsUserInRole():指出用户是否在指定的角色中

    11)      RemoveUserFromRole():从一个角色中移除一个用户

    12)      RemoveUserFromRoles():从多个角色中移出一个用户

    13)      RemoveUsersFromRole():从一个角色中移除多个用户

    14)      RemoveUsersFromRoles():从多个角色中移除多个用户名

    15)      RoleExists():用户角色名是否已存在于角色表中。

    代码实现(1)
    创建用户:

    MembershipCreateStatus mc;
    
    Membership.CreateUser(txtUid.Text, txtPwd.Text, txtEmail.Text, txtQuestion.Text, txtAnswer.Text, true, out mc);
    
    Response.Write(mc.ToString());

    删除用户:

    if (Membership.DeleteUser(txtUid.Text))
    
         Response.Write("OK");
    
    else
    
    Response.Write("Error");

    修改用户信息:

    if (User.Identity.IsAuthenticated)
    
    {
    
         MembershipUser user = Membership.GetUser();
    
         user.Email = txtEmail.Text;
    
         Membership.UpdateUser(user);
    
         Response.Write(user.Email.ToString());
    
    }


    验证用户登录信息

    bool isok = Membership.ValidateUser(txtUid.Text, txtPwd.Text);
    if (isok)
    {
         FormsAuthentication.SetAuthCookie(txtUid.Text, false);
         Response.Write("OK");
    }
    else
    {
         Response.Write("Error");
    }

    获取登录用户的信息

    if (User.Identity.IsAuthenticated)
    
    {
         MembershipUser myuser = Membership.GetUser();
    
         if (myuser != null)
    
         {
    
     Response.Write(myuser.CreationDate);
    
     Response.Write(myuser.Email);
    
     Response.Write(myuser.IsLockedOut);
    
     Response.Write(myuser.IsOnline);
    
     Response.Write(myuser.PasswordQuestion);
    
     Response.Write(myuser.UserName);
          }
    }


    根据密码问题的答案返回用户密码

    if (User.Identity.IsAuthenticated)
    
    {
         MembershipUser user = Membership.GetUser(txtUid.Text);
         txtPwd.Text = user.GetPassword(txtAnswer.Text);
    }



    修改用户密码

    if (User.Identity.IsAuthenticated)
    
    {
         MembershipUser user = Membership.GetUser();
         user.ChangePassword(txtPwd.Text,txtPWd2.Text);
         Response.Write(user.GetPassword(txtAnswer.Text));
    }


    解锁用户

    MembershipUser user = Membership.GetUser(txtUid.Text);
    
    bool b = user.UnlockUser();
    
    Response.Write(b+" "+user.IsLockedOut);


    拒绝用户登录

    MembershipUser user = Membership.GetUser(txtUid.Text);
    
    user.IsApproved = false;
    
    Membership.UpdateUser(user);
    
    Response.Write(user.IsLockedOut);


    允许用户登录

    MembershipUser user = Membership.GetUser(txtUid.Text);
    
    user.IsApproved = true;
    
    Membership.UpdateUser(user);
    
    Response.Write(user.IsLockedOut);


    根据用户名或邮箱来检索用户

     MembershipUserCollection users;
    
     switch(listType.Text)
     {
      case   "姓名":
      users = Membership.FindUsersByName(txtFind.Text);
      if (users.Count > 0)
      {
           showUserInfo(users);
      }
      else
      {
           Response.Write("未找到用户名");
      }
      break;
      case   "邮箱":
      users = Membership.FindUsersByEmail(txtFind.Text);
      if (users.Count > 0)
      {
           showUserInfo(users);
      }
      else
      {
           Response.Write("未找到邮箱");
      }
      break;
     }

    代码实现(2)

    加载所有用户

    MembershipUserCollection user = Membership.GetAllUsers();
    listUser.DataSource = user;
    listUser.DataBind();

    加载所有角色

    string[] role = Roles.GetAllRoles();
    
    listRole.DataSource = role;
    
    listRole.DataBind();


    添加新角色

    Roles.CreateRole(txtRole.Text);

    删除角色

    Roles.DeleteRole(txtRole.Text);

    将一个用户添加到一个角色

    Roles.AddUserToRole(listUser.Text, listRole.Text);

    将一个用户从一个角色中移除

    Roles.RemoveUserFromRole(listUser.Text, listRole.Text);

    将一个用户加入到多个角色中去

             int n = 0;
             foreach (ListItem li in listRole.Items)
             {
                 if (li.Selected) n++;
             }
             string[] roles = new string[n];
             int i=0;
             foreach(ListItem li in listRole.Items)
             {
                 if(li.Selected)
                 {
                     roles[i++] = li.Text;
                 }
             }
             Roles.AddUserToRoles(listUser.Text, roles);

    将一个用户的所有角色移除

    string[] str = Roles.GetRolesForUser(listUser.Text);
    
    Roles.RemoveUserFromRoles(listUser.Text,str);

    将多个用户加入到一个角色中去

             int n = 0;
             foreach (ListItem li in listUser.Items)
             {
                 if (li.Selected) n++;
             }
    
             string[] users = new string[n];
             int i=0;
             foreach (ListItem li in listUser.Items)
             {
                 if (li.Selected)
                 {
                     users[i++] = li.Text;
                 }
             }
             Roles.AddUsersToRole(users,listRole.Text);

    将一个角色中的所有的用户移除

    string[] users = Roles.GetUsersInRole(listRole.Text);
    
    Roles.RemoveUsersFromRole(users, listRole.Text);

    将多个用户加入到多个角色

             int n = 0;
             foreach (ListItem li in listUser.Items)
             {
                 if (li.Selected) n++;
             }
             string[] strUser = new string[n];
             n = 0;
             foreach (ListItem li in listRole.Items)
             {
                 if (li.Selected) n++;
             }
             string[] strRoles = new string[n];
             for (int i = 0; i < listUser.Items.Count; i++)
             {
                 strUser[i] = listUser.Items[i].Text;
             }
             for (int i = 0; i < listRole.Items.Count; i++)
             {
                 strRoles[i] = listRole.Items[i].Text;
             }
    
             Roles.AddUsersToRoles(strUser, strRoles);

    第二部分

    玩转Membership之五

    -----底层三剑客:Membership、MembershipUser、Roles

    本部分内容主要对Membership类、MembershipUser类和Roles类的常用属性和方法进行详尽的介绍。

    Membership类属于System.Web.Security命名空间,其中包含了大量有用的静态方法。,下面列出最常用的一些静态方法

     

    CreateUser()

    创建一个新用户

    举例如下:

    MembershipCreateStatus createStatus;

    Membership.CreateUser("丰志强", "www.fengzhiqiang.name", "zhiqiangfeng@gmail.com",

    "你最喜欢的运动是什么?", "旅游", true, out createStatus);

    需 要注意的是倒数第二个参数,它是一个布尔值,决定创建的帐号是否被激活。如果设置为false,则帐号虽然创建成功,但是不可用,还需要在以后将 MembershipUSer的IsApproved属性设置为true,然后调用UpdateUser()方法进行激活。新创建的用户默认情况下是被激 活的。

    最后一个参数返回一个枚举值,用以表示创建用户是否成功。MembershipCreateStatus.Success代表创建成功,其他的枚举值代表没有创建成功的各种原因

     

    DeleteUser()

    通过提供的用户名字,将数据库中的用户删除。你也可以指定是否从其他表中将与此用户相关的所有信息全部删除,默认情况下是全部删除的。

     

    GetUser()

    通过提供的用户名字,从数据库中获取用户

     

    GetUserNameByEmail()

    通过邮箱获取用户的名字,如果数据库中存在多个匹配的用户,则只返回第一个用户名

     

    FindUsersByName()

    此方法支持模糊查询,返回所有匹配或者部分匹配的用户列表

     

    FindUsersByEmail()

    此方法支持模糊查询,返回所有匹配或者部分匹配的用户列表

     

    GetAllUsers()

    获取所有用户的集合。此方法的另外一个重载,通过起始序号和集合长度,可以返回所要求的部分用户的集合

     

    GetNumberOfUsersOnline()

    获取登陆在线的用户总数

     

    GeneratePassword()

    生成指定长度的随机密码

     

    UpdateUser()

    更新用户信息

     

    ValidateUser()

    对提供的用户名和密码进行验证,检验其是否有效

     

    MembershipUser提供如下常用的实例方法

     

    UnlockUser()

    激活因多次输入错误密码而被锁定的帐户

     

    GetPassword()

    用户通过输入安全问题的答案获取密码。注意的是如果密码是hashed类型,则不可用

     

    ResetPassword()

    使用系统生成的新的随机密码对用户密码进行重置。方法的返回值是生成的随机密码。随机密码可以直接显示给用户或者通过邮件的方式发送给用户

     

    ChangePassword()

    改变用户密码

     

    ChangePasswordQuestionAndAnswer()

    改变安全问题和答案

     

    需 要注意的一点是:如果你想让一个帐户不可用,那么只能通过将MembershipUser的IsApproved属性设置为fasle让其处于未激活状 态。而不能通过编程的方式将其锁定,用户帐号的锁定只能由用户连续输错密码去触发,但是我们可以通过调用UnlockUser()进行解锁操作。

     

    使用GridView和DetailsView绑定用户信息关键代码:

      Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香   protected void Page_Load(object sender, EventArgs e)

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香    ...{

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香        GridView1.DataSource = Membership.GetAllUsers();

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香        GridView1.DataKeyNames=new string [] ...{"UserName"};

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香        GridView1.DataBind();

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香    }

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香    ...{

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香        List<MembershipUser> list = new List<MembershipUser>();

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香        list.Add(Membership.GetUser(GridView1.SelectedValue.ToString()));

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香        DetailsView1.DataSource = list;

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香        DetailsView1.DataBind();

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香 

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香    }

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香

     

    在用户点击登陆按钮的时候,我们可以做如下处理

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香If(Membership.ValidateUser(txtName.text,txtPassword.text))

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香...{

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香         FormsAuthentication.RedirectFromLoginPage(txtName,false);

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香}

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香Else

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香...{

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香         Response.Write(“你的密码无效!”);

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香}

    Membership、MembershipUser和Roles类 - 琴瑟谷香 - 琴瑟谷香

     

    使用Roles类通过编程的方式创建角色和给用户指定角色

     

    Roles类常用的方法

    CreateRole()

    DeleteRole()

    RoleExists()

    GetAllRoles()

    AddUserToRole()

    AddUserToRoles()

    RemoveUserFromRole()

    RemoveUserFromRoles()

    RemoveUsersFromRole()

    RemoveUsersFromRoles()

    IsUserInRole()

    GetRolesForUser()

    GetUsersInRole()

    FindUsersInRole()

  • 相关阅读:
    http://msdn.microsoft.com/zhcn/library/cc838145(VS.95).aspx
    去除HTML标签2005SQL写法
    UML中符号的意义(转)
    删除DataTable中重复的记录
    Matlab R2010在centost下的安装
    Eclipse 编译 Android工程时,提示该错误 :Error generating final archive: Debug certificate expired on xxxxxx(日期) 解决办法
    centos上安装opencv库
    windows下eclipse远程连接Hadoop集群进行开发
    centos6 上用eclipse调试hadoop程序报org.apache.hadoop.io.compress.SnappyCodec not found错误解决方法
    cocoa设计模式笔记
  • 原文地址:https://www.cnblogs.com/Raywang80s/p/2827559.html
Copyright © 2020-2023  润新知