membership在vs2003中的应用-MemberShip(一)

       大家知道vs2005已经出来了,而且多加了很多个优异的功能,但由于项目限制,我们依然有很多人徘徊在vs2003中。最近我研究communityServer发现里面竟然后masterpage和memebership两个类,这是vs2.0中这两部分的前期版本,适用于vs2003.所以我用reflector工具把他们反编译过来。在此做了个分析,希望对大家有所帮助,并共同进步。
      由于原文件太大,此处无法上传,所以大家有communitysever的可以从里面获得然后反编译为自己所用,没有的就到网络上搜索吧。很多。
  Membership里共有四个大类:  scalablehosting;scalablehosting.configuration;scalablehosting.profile;scalablehosting.Security.
  scalablehosting:表示一切类的基类。
  scalablehosting.configuration:一些配置的基本信息(有cookie的存放地址,名称等)。
  scalablehosting.profile:用户的个性化信息。不同的用户可能看到不同的界面和不同的配置。
  scalablehosting.Security:安全性设置,就是用户角色和权限的配置了,都在这里面。
  我自己的开始是小部分的练习,就是从添加用户,修改,删除用户,然后授予角色,设置特性开始的。所以请容许我按照我的思路来描述这些类,而不是一个类一个类的来讲他们的作用。
  我依次会从用户的增,删,改,查询为起点来说明,这就是第一讲。
 
  添加用户:

    因为是第一个小DEMO,所以需要做的前提事情很多,但以后这些就不需要做了,虽然看起来很麻烦,我也是费了一天的时间才调整好。但为了以后方便的使用,建议大家还是先这样布置好。
    首先在webconfig中,添加配置节。注意配置类型的修改,如果从communityserver中copy过来,是带publickey的,这个我们在测试的时候可以去掉(当然AssemblyInfo.cs中的keyfile属性内容设置为""),如果把publickey去掉,必须将memberrole.dll放在你的应用程序的根目录下。注意配置节里凡是有关空间名称的地方,都得把type修改成memberrole.dll中的空间名称,因为communityserver中用的是自己扩展的类。

还有就是自己添加的appSettings里面的连接字符串的名字要和上面这些配置节的名字一致。对配置节不熟悉的人可以多参考一些配置节设置的资料,我上面也有一篇,写的比较简单。
    其次是数据库里面的设置,必须加入communityserver中的六个aspnet_开头的表。而且还得把所有aspnet开头的存储过程copy过来。注意表aspnet_SchemaVersions虽然与其他表无关联,但里面的内容很重要,也得copy过来。
   
    添加用户的主要方法用到的是SqlMembershipProvider.cs中的CreateUser()。我们先来说说用到的类(当然先得在你的应用程序里添加引用memberrole.dll然后在cs文件中,添加using ......)
    membershipuser:其实就是membership表的一个实体类,注意这个类有一个类属性[Serializable]表示可序列化的,也就是你可以把这个对象当成是一个只有一条记录的dataTable,如果需要返回多条记录,那就使用MembershipUserCollection,这个也是个[Serializable]的类,功能类似于DATASET。现在流行orm结构,也就是对象关系映射。直接通过操作实体类的方法而不是SQL语句来更新数据库。通过数据表生成实体类的方法有很多,己写的工具或者codesmith+模板的形式都可以,网络上一搜很多,此处题外话。
    membership:这个就是对用户进行增,删,改的操作类,返回的当然就是membershipuser对象。注意membership的大部分方法都是static方法,也就是说不需要实例化membership就可以直接使用它的方法
          例如:membership.createuser(...);
    我们可以看到,membership里的createuser有很多重载方法,其实最主要的就是说明一个用户必须得有用户名和密码,其他都可忽略。所有的操作都其实都在参数最长的那个方法里,然后从这个方法调用Membership.Provider.CreateUser(...),其实provider就类似于一个工厂方法,通过它进行 Membership.Initialize(),然后在这个方法里通过查询配置节来获得究竟使用sqlprovider还是accessprovider,为vs2003使用的memberrole.dll只实现了sqlprovider方法,而vs2005里的还实现了access方法。这以后就去调用SqlMembershipProvider.cs中的createuser(..)方法,这才是真正增加用户的方法,这里可以看到参数的赙值,调用的存储过程,以及错误的返回和判断。
    当我们只需要用户名和密码来添加用户的时候,注意修改配置文件里的membership配置节的地方,将requiresUniqueEmail属性改为false,这样就不需要e-mail必须填写了。
    例子:
     两个textbox(一个是用户名txtname,一个是密码txtpwd),一个按钮(btn),然后在按钮的click事件中直接写:
         
    虽然主要用到的方法是以上这几个,但好多错误和安全的判断都在SecUtility.cs,有兴趣的话我们可以去关心它一下。
       Membership.CreateUser(txtname.Text,txtpwd.Text);
     就OK了,到aspnet_membership数据表中查看你添加的用户吧。系统自动会把关联表里的内容也添加好,看看aspnet_Users是不是也有内容。很简单吧。


  查询用户:

      以上的配置都设置好后,后面会越来越简单。
      所有对用户的操作我们都在membership类中寻找,查询用户主要有两个方法FindUsersByName()和FindUsersByEmail,他们都有多种重

载,大家根据自己的情况使用。这两个方法返回的都是MembershipUserCollection对象(表示可能多条记录);
     例子bymail
     一个textbox(txtmail),一个按钮(search),在按钮的click事件中写
        MembershipUserCollection myuser=Membership.FindUsersByEmail(txtmail.Text);
                         //因为返回的是collection,而我们肯定只有一个的话,可以如下循环
   foreach(MembershipUser user in  myuser)
   {
    txtname.Text=user.UserName.ToString();
   }

    例子byname:
    一个textbox(txtname),一个按钮(search).按钮事件中写的东西和上面一样,不过调用的是FindUsersByName方法。

  修改用户密码:

     因为我的这个memberrole.dll版本中没有任何关于修改的方法,但SqlMembershipProvider提供了很多修改方法,包括修改membershipuser里面的所有属性的方法,所以我们很容易的在membership类中自己调用。我自己增加一个修改密码的,注意使用static方法:
  public static bool  ChangePwd(string username,string oldpwd,string newpwd )
  {
   return Membership.Provider.ChangePassword(username,oldpwd,newpwd);
  }
    由于SqlMembershipProvider的方法中提供了对参数的检验,所以这个地方我们什么都不用管,直接把参数给它就好。
    例子:
    三个textbox(一个txtname,一个旧密码,一个新密码)。一个按钮(edit)在按钮事件中写:

   bool test=Membership.ChangePwd(txtname.Text,txtold.Text,txtnew.Text);
   if(test) {Response.Write("修改成功!");}

   删除用户:


      删除用户包括两种方法,一种是只删除用户,另一种是删除与用户关联的表中的数据。其实在membership只是一个方法重载了两次。
      我们来做个最简单的例子:
      一个textbox(用户名),一个按钮(删除),click事件中写:
                     bool test=Membership.DeleteUser(txtname.Text);
   if(test) Response.Write("删除成功!");
     

    写了这么多,做了这么多后,我对memberrole中关于membership中的部分算是基本上懂了。以上主要都是对用户的基本操作,除了前提配置有点麻烦后,了解这些操作,连一个小时都不到。朋友们,你们明白了吗。
    
    明天我将研究memberrole里面的role究竟有什么好东东。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值