MemberRole是一个在asp.net 1.1下实现用户管理、角色管理、用户特性信息存储(profile)等的一个组件,该组件被ASP.NET 2.0 Beta 2所采用,也就是ASP.NET 2.0 Beta 2中所说的Membership and Roles。如果你在asp.net 1.1下采用了MemberRole,那么你的web程序将会很容易的过渡到asp.net 2.0,另外多个采取MemberRole进行用户管理的web程序需要整合时也非常容易。我将分4个专题来分析MemberRole,探索一下MemberRole到底是如何工作的,无论对CS的构架还是对了解asp.net 2.0都是非常有帮助的。
CS中,运用该组件的4个部分:membership、roleManager、profile、anonymousIdentification的运用(整个MemberRole也这四部分功能)。
在分析前,准备需要一个工具:Reflector.exe,没有的朋友google一下,下载它。
本次专题分析membership,先看一下CS中Membership的配置文件(Web.Config中):
<membership userIsOnlineTimeWindow="15" >
<providers>
<add
name="CommunityServerSqlProvider"
type="Openlab.AutoRegister.CSAutoBlogGalleryMembershipProvider, Openlab.CSAddOns"
connectionStringName="SiteSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed"
applicationName="dev"
description="Stores and retrieves membership data from the local Microsoft SQL Server database"
autoCreateBlog="false"
defaultBlogGroupID="3"
autoCreateGallery="false"
defaultGalleryGroupID="2"
maxInvalidPasswordAttempts = "999"
passwordAttemptWindow = "999"
minRequiredPasswordLength = "4"
minRequiredNonalphanumericCharacters = "0"
/>
</providers>
</membership>
userIsOnlineTimeWindow:这是一个数值,用来计算在线用户的数量,例如:15,就表示如果用户在15分钟后不活动(发出Http请求)CS系统将视该用户不在线。
Name:名称
type:类的名字空间与所在的程序集合
connectionStringName:数据库连接字符串节点的key。通过这个key就可以找到连接数据库的用户名与密码
enablePasswordRetrieval:是否打开取回秘密功能
enablePasswordReset:是否打开秘密重新设功能
requiresQuestionAndAnswer:注册时是否需要填写Question与Answer
requiresUniqueEmail:注册时是否Email唯一
passwordFormat:密码的加密格式
applicationName:使用该membership应用程序的名称
description:描述信息
以下4个参数是CCS中添加的,目的是给注册用户自动开通相册和博客
autoCreateBlog:是否当用户注册时自动为该用户建立一个Blog
defaultBlogGroupID:默认的建立blog的分组ID
autoCreateGallery:是否当用户注册时自动为该用户建立一个相册
defaultGalleryGroupID:默认的建立相册的分组ID
用Reflector.exe打开MemberRole.dll,你可以看到以下的内容:
再打开Microsoft.ScalableHosting.Configuration节点
这次我们只关注两个类MembershipConfig、MembershipConfigHandler。MembershipConfigHandler实现了IConfigurationSectionHandler接口。也就是说,CS启动后如果调用ConfigurationSettings.GetConfig("memberrolesprototype/membership"),系统将会自动的调用MembershipConfigHandler中的Create方法把web.config中memberrolesprototype/membership的配置内容读入进行处理。先看以下Create做了些什么:
public virtual object Create(object parent, object configContextObj, XmlNode section)
{
MembershipConfig config1 = new MembershipConfig(parent as MembershipConfig);
int num1 = -1;
ConfigUtils.GetAndRemovePositiveIntegerAttribute(section, "userIsOnlineTimeWindow", ref num1);
if (num1 > 0)
{
config1.UserIsOnlineTimeWindow = num1;
}
string text1 = null;
ConfigUtils.GetAndRemoveStringAttribute(section, "hashAlgorithm", ref text1);
if ((text1 != null) && (text1.Length > 0))
{
config1.HashAlgorithmType = text1;
}
ConfigUtils.CheckForUnrecognizedAttributes(section);
MembershipProvider provider1 = null;
foreach (XmlNode node1 in section.ChildNodes)
{
if (node1.NodeType != XmlNodeType.Element)
{
continue;
}
if (node1.Name != "providers")
{
throw new ConfigurationException("Unrecognized tag: " + node1.Name, node1);
}
foreach (XmlNode node2 in node1.ChildNodes)
&