asp.net2.0用户和角色管理
一、数据库配置:打开C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727下的aspnet_regsql.exe数据库配置工具,配置好数据库。
二、配置Web.config:这里主要是配置 <system.web>下的membership 和roleManager两个节点。
1、membership,他的配置要相对复杂些。格式如下:
<membership>
<providers >
<remove name="AspNetSqlMembershipProvider"/>
<add name="AspNetSqlMembershipProvider" connectionStringName="MemberShip_Connection"
type="System.Web.Security.SqlMembershipProvider"
enablePasswordReset="false"
requiresUniqueEmail="true"
requiresQuestionAndAnswer="true"
passwordFormat= "Hashed"
maxInvalidPasswordAttempts= "10"
passwordAttemptWindow="2"
minRequiredPasswordLength= "2"
minRequiredNonalphanumericCharacters= "0"
passwordStrengthRegularExpression= ""
/>
</providers>
</membership>
别的先不看,可以看到有一个remove 节点,这是因为在系统中有一个存在的AspNetSqlMembershipProvider配置,所以在一开始就要移除它,当然也可以换成<clear/>
这两种方式的话,add中的name就一定要写成AspNetSqlMembershipProvider,
还有一种方式,在membership中添加属性defaultProvider="MyProvider",这样的话,下面的节点name就要写成MyProvider了,如:
<membership defaultProvider="MyProvider">
<providers >
<add name="MyProvider" connectionStringName="MemberShip_Connection"
type="System.Web.Security.SqlMembershipProvider"
enablePasswordReset="false"
requiresUniqueEmail="true"
requiresQuestionAndAnswer="true"
passwordFormat= "Hashed"
maxInvalidPasswordAttempts= "10"
passwordAttemptWindow="2"
minRequiredPasswordLength= "2"
minRequiredNonalphanumericCharacters= "0"
passwordStrengthRegularExpression= ""
/>
</providers>
</membership>
connectionStringName属性是表示连接到数据库的字符串,但注意,关不是在这里写边接字符串,这里只是它的名字而已,要在connectionStrings中添加一个节点,如:
<add name="MemberShip_Connection" connectionString="Server=(local);DataBase=MS;uid=sa;pwd=;" providerName="System.Data.SqlClient"/>
type表示用种方式的数据库,我这里是用的SQL,就是:"System.Web.Security.SqlMembershipProvider"
现在再来看节点中的其它属性,
enablePasswordRetrieval 获得一个值,指示当前成员资格提供程序是否配置为允许用户检索其密码。
enablePasswordReset 获得一个值,指示当前成员资格提供程序是否配置为允许用户重置其密码。
requiresQuestionAndAnswer 获取一个值,该值指示默认成员资格提供程序是否要求用户在进行密码重置和检索时回答密码提示问题。
applicationName 获取或设置应用程序的名称。
requiresUniqueEmail 指示用户在创建用户时是否必须提供唯一的电子邮件地址值。
passwordFormat 指示在成员资格数据存储区中存储密码的格式。下面有详细说明
maxInvalidPasswordAttempts 获取锁定成员资格用户前允许的无效密码或无效密码提示问题答案尝试次数。
minRequiredPasswordLength 获取密码所要求的最小长度。
minRequiredNonalphanumericCharacters 获取有效密码中必须包含的最少特殊字符数。
passwordAttemptWindow 获取在锁定成员资格用户之前允许的最大无效密码或无效密码提示问题答案尝试次数的分钟数。
对PasswordFormat 的详细说明
属性指示存储密码的格式。密码可以采用 Clear、Encrypted 和 Hashed 密码格式存储。
Clear 密码以明文形式存储,这可以提高存储和检索密码的性能,但安全性较差,当数据源安全性受到威胁时此类密码很容易被读取。
Encrypted 密码在存储时进行了加密,可以在比较或检索密码时进行解密。此类密码在存储和检索时需要进行额外的处理,但比较安全,
在数据源的安全性受到威胁时不容易被获取。
Hashed 密码在存储到数据库时使用单向哈希算法和随机生成的 salt 值进行哈希处理。在验证某一密码时,
将用数据库中的 salt 值对该密码进行哈希计算以进行验证。无法检索哈希密码。
不过当PasswordFormat 设为了Encrypted 和 Hashed时,我不知道如何与数据库中进行对比,用md5加密后对比是不行的。
2、roleManager,他相对就简单多了,东西也很少,不过默认下是禁用的,所以要启用他。如:
<roleManager enabled="true" cacheRolesInCookie="true" >
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" connectionStringName="MemberShip_Connection" type="System.Web.Security.SqlRoleProvider"/>
</providers>
</roleManager>
他的属性和membership差不多,就不多说了, cacheRolesInCookie="true" 是启动高速缓存,在下次登录时,会先查看本机的cookie。
三、MemberShip 和 MemberShipUser
很明显可以看出,一个是管理器,一个是实体,MemberShip有很多的静态方法,可对MemberShipUser进行CRUD操作,MemberShipUser也有很多方法,
这样就可以非常快地管理用户了,如果把控制加上来一起用的话,会发现,根本不用写一行代码~太爽了。我有一个验证用户登录的代码:
if (Membership.ValidateUser(TextBox1.Text, TextBox2.Text))
{
FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, false);
MembershipUser user = Membership.GetUser(TextBox1.Text);
user.Comment = "0";
Membership.UpdateUser(user);
}
else
{
MembershipUser user = Membership.GetUser(TextBox1.Text);
if (user != null)
{
user.Comment = Convert.ToString(Convert.ToInt32(user.Comment) + 1);
Membership.UpdateUser(user);
}
}
其它的就很简单了,要配合自己的逻辑才能更快地写出来。
四、Roles,
他只有一个类,也就相当于是管理器,而实体则是一个字符串,
可以添加角色,删除角色,把用户添加或移出角色,查找等
感觉他就没有什么说的了一样,也没有什么特殊性的东西。
通过用户和角色的管理,可以很快地管理用户和角色,如果再加上权限、权限和角色关系的话,就会很有用了,
附上一个我写的练习,不过是乱七八糟的。