1、概念


Web用户权限管理,简单地说,要解决两个任务:


1.身份验证(authentication):即确定访问网站的用户身份,解决“用户是谁”的问题;


2.使用权限(authorization):即在用户身份确定之后,授予他一定的权限,允许他使用特定的服务,这是解决“用户能干什么”的问题。


ASP.NET成员资格的系统架构:


ASP.NET 成员资格与权限_ide


2、操作

       新建用户权限数据库,管理用户与权限,在AppData文件夹下会自动生成相关的数据库,并利用如下操作进行管理

ASP.NET 成员资格与权限_数据库_02


3、config文件配置:

<configuration>
    <system.web>

        <roleManager enabled="true" />
      <authentication mode="Forms">
        <forms loginUrl="~/login.aspx" timeout="2880" />       
      </authentication>

      <authorization>
        <deny users="?" />
      </authorization>


      <compilation debug="true" targetFramework="4.0" />  
    </system.web>

</configuration>

4、用户权限管理框架



MemberShip类:提供了一系列的静态方法与属性,完成创建用户、管理密码以及身份验证的功能。


MemberShipUser类:代表单个的用户权限信息,该对象公开成员资格用户的相关信息(如电子邮件地址),并为成员资格用户提供功能(如更改或重置其密码的功能)。


Roles类:提供了一系列的静态方法与属性,完成角色管理的相关功能,例如,将某个用户加入到特定的角色中。


在网页中,可以直接使用MemberShip的一系列静态方法来管理用户,如创建新用户、删除一个用户、更新用户信息等。例如:


  Membership.CreateUser("username", "password");

  Membership.DeleteUser("username");

   这就使人们可以很方便地在网页中集成用户管理的功能(如在页面上提供注册新用户账号的功能)


¢Roles类提供了一系列的静态方法可以完成创建/删除角色,向角色中添加和删除用户,以及查询用户是否属于某个角色等功能。


    string[] users= Roles.GetUsersInRole("Admin");

   Roles.AddUserToRole("username", "rolename");


¢为了保存用户的登录信息,可以使用Forms-Authentication类的SetAuthCookie方法保存用户的登录凭据:


 if (Membership.ValidateUser("username","password"))

         //将用户登录凭据保存到Cookie中

         FormsAuthentication.SetAuthCookie("username",true/false);


¢之后,在网页中就可以通过User.Identity属性来判断用户是否登录。


¢注销时,调用FormsAuthentication.SignOut()方法,这样,用户的登录凭据就会被删除。以后要访问特定资源,就需要重新登录。



5、用户控件

ASP.NET 成员资格与权限_数据库_03

6、将成员资格数据库并入本网站数据库



使用Windows\Microsoft.NET\Framework\v2.0.50727\ aspnet_regsql.exe工具将成员资格数据库移到SQLServer中。



ASP.NET 成员资格与权限_成员资格_04

更改config文件配置:

<configuration>
<system.web>
<roleManager enabled="true" />
<authentication mode="Forms">
<forms loginUrl="~/login.aspx" timeout="2880" />
</authentication>
<authorization>
<deny users="?" />
<allow roles="admin" />
</authorization>


<compilation debug="true" targetFramework="4.0" />


<membership defaultProvider="SqlProvider">
<providers>
<clear />
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MySqlConnection" />
</providers>
</membership>
</system.web>
<connectionStrings>
<add name="MySqlConnection" connectionString="Data Source=xinyue-PC;Initial Catalog=Test;User ID=sa;Password=sa123456;"/>
</connectionStrings>

</configuration>



7、添加扩充的用户信息



所有的成员资格用户信息都有一个标识




MembershipUser user =Membership.GetUser("sa");
if(user!=null)
Response.Write(user.ProviderUserKey);





这个用户标识是一个GUID字串,不可能重复。


利用此标识,根据实际情况可以在数据库中另外创建一个自定义用户表以保存一些扩充信息,这个表与成员资格的用户表之间使用此用户标识进行关联。


因此,既可以利用ASP.NET现有的成员资格组件以减少开发工作量,同时又能兼顾实际需要。



8、成员资格管理结合WCF的利用