`

考察ASP.NET 2.0的Membership, Roles, and Profile - Part 7

阅读更多

本文英文原版及代码下载:
http://aspnet.4guysfromrolla.com/articles/101806-1.aspx

考察ASP.NET 2.0的Membership, Roles, and Profile - Part 7

导言:

在前6章我们考察了.NET Framework包括的那些provider——比如SqlMembershipProvider, SqlRoleProvider, SqlProfileProvider等.实际上

我们可以下载这些provider的源代码,以及一个Provider工具包来创建我们自己的provider(http://msdn2.microsoft.com/en-

us/asp.net/aa336558.aspx),而Scott Guthrie在他的博客文章《ASP.NET 2.0 Membership, Roles, Forms Authentication, and Security

Resources》(http://weblogs.asp.net/scottgu/archive/2006/02/24/ASP.NET-2.0-Membership_2C00_-Roles_2C00_-Forms-

Authentication_2C00_-and-Security-Resources-.aspx)里列出了很多自定义的Membership, Roles, and Profile provider.

如果这些内置的provider无法满足你的需要,你可以创建自己的provider.本文,我们将探讨创建和使用一个自定义provider,然后用一个简单

的自定义provider将profile信息存储到一个XML文件里.

Profile System的职责

像在Part 6探讨的一样,Profile System允许用户在Web.config文件定义一系列的 "profile properties",然后在某些存储备份(backing

store)里保存和读取这些属性值.

如果这些内置Profile providers不能满足需要,你可以创建你自己的provider。创建一个用户定制provider——不管是用于Profile,

Membership, Roles, ASP.NET site map,或是其他的什么子系统,都有遵循如下的步骤:

1.创建用户定制provider——创建源自ProfileProvider class类的一个类.

2.设置应用程序使用用户定制provide——我们需要在Web.config文件里指定Profile system使用我们的定制provid而不是默认的

SqlProfileProvider。

微软的Provider Toolkit web page页面里有关于学习创建用户定制provider的信息.对Profile system而言,有2个文件值得阅读:

《Introduction to Profile Providers》——它介绍了Profile system的概念以及职责;而《ASP.NET 2.0's Profile Providers》——它更

直观的介绍了 in ASP.NET 2.0里的SqlProfileProvider是如何贯彻的.

本文的剩下部分我们将探讨我们自定义的XmlProfileProvider——将用户信息装入App_Data文件夹里的一个XML文件,完整代码(以及简单的测

试程序)在本文的下载代码里.


设计XmlProfileProvider

默认,Membership, Roles,Profile system的provider都被设计为多个应用程序存储信息.明显的例子就是aspnet_Applications表,每一个应用程序实例对应一条记录.系统里的每一个用户通过aspnet_Users表里的ApplicationId这个外键与某个应用程序联系起来.我决定将该功能应用到我们的profile provider里(对XmlProfileProvider来说,Membership 和 Roles providers都可以使用它).Profile数据默认时存储在App_Data文件夹里的一个文件里,以阻止用户从浏览器直接请求这些文件(如果一个用户试图从浏览器访问http://www.yoursite.com/App_Data/anyFile 的话,ASP.NET会返回一个HTTP 404消息)。不过你也可以通过 provider的profileFolder设置来指定XML文件存放在什么地方.

具体来说,Profile数据以如下形式进行存储:~/App_Data/XmlProfiles/applicationName/username.xml.每一个XML文件开始为一个<profileData>根元素,而子元素就由定义在Web.config文件里的Profile属性里决定了。

就像在Part 6探讨了一样,Profile属性可以为strings, XML,或binary数据,对string类型的属性而言,XML文件将其保存为文本形式;如果是XML类型则原封不动的保存;如果是binary类型的就保存为64位编码的binary.假设我们在Web.config文件<properties>元素里定义了6个Profile属性:

<profile defaultProvider="...">
<providers>
...
</providers>

<properties>
<add name="Birthdate" type="DateTime" serializeAs="String" />
<add name="HomepageUrl" type="String"/>
<add name="Signature" />
<add name="IncludeSignatureInPosts" type="Boolean"/>
<add name="BillingAddress" type="Address" serializeAs="Xml" />
<add name="ShippingAddress" type="Address" serializeAs="Binary" />
</properties>
</profile>

其中的Address类型是定义在App_Code文件夹里的一个简单类,包含了些标量属性,比如:Address1, Address2, City等.注意:Profile属性BillingAddress序列化为XML,而ShippingAddress为binary.

对于上面定义的Profile属性,如果有个叫"Jisun"的用户登录我们的网站,使用Profile system,且应用程序的名称为"MyApp",那么将会创建一个~/App_Data/XmlProfiles/MyApp/Jisun.xml的文件,其包含的代码可能为:

<?xml version="1.0" encoding="utf-8"?>
<profileData>
<IncludeSignatureInPosts>False</IncludeSignatureInPosts>
<Signature>What is life, but a seemingly random collection of 1s and 0s?</Signature>
<HomepageUrl>http://www.datawebcontrols.com</HomepageUrl>
<Birthdate>1979-04-01</Birthdate>
<ShippingAddress><![CDATA[AAEAAAD/////AQAAAAAAAAAMAHBfQ29kZS5j...]]></ShippingAddress>
<BillingAddress>
<Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Address1>123 Anywhere St.</Address1>
<Address2 />
<City>San Diego</City>
<State>CA</State>
<ZipCode>92109</ZipCode>
</Address>
</BillingAddress>
</profileData>

就像你看见的那样,每个Profile属性被处理成一个XML元素并作为<profileData>根元素的子元素. 对string类型的属性,比如IncludeSignatureInPosts, Signature, HomepageUrl,以及Birthdate,其值在XML元素里为文本值;对XML类型的属性(BillingAddress),其值在<BillingAddress>元素里保存为原始形式;binary类型的属性ShippingAddress被编码为64位.

规划XmlProfileProvider Class类

当构建用户定制Profile provider时,我们要扩充System.Web.Profile.ProfileProvider class类.至少要包含2个方法——GetPropertyValues(context, collection) 和 SetPropertyValues(context, collection).这2个方法都接受2个输入参数——context 和 collection. 其中context提供的信息为:用户名以及该用户是否经过认证(ASP.NET支持匿名profile,不过这超出了本文的范围,更多信息请参阅文章《Profiles section on the ASP.NET Quickstarts 》(http://dotnetjunkies.com/QuickStartv20/aspnet/doc/profile/default.aspx#anon));另外collection提供一系列的Profile属性.

上面的GetPropertyValues方法返回所需Profile属性的值,相反SetPropertyValues方法的目的是向backing store(就本例而言,为XML文件)写入属性值.在ProfileProvider class类里还有其它的类,不过我们可以创建仅仅执行这2个方法的自定义profile provider.

在你的Website里使用XmlProfileProvider自定义Provider

为了在你的应用程序里使用自定义的XmlProfileProvider,我们首先要在本文结尾处下载其代码,将CustomProviders.dll放在你的web 应用程序的/bin目录,再更新你的Web.config文件:

<profile defaultProvider="MyCustomProfileProvider">
<providers>
<clear />

<add name="MyCustomProfileProvider"
type="CustomProviders.XmlProfileProvider, CustomProviders"
applicationName="applicationName"
[profileFolder="baseFolderPathForProfileXMLFiles"] />
</providers>

<properties>
...
</properties>
</profile>

其中profileFolder属性是可选的,如果忽略的话,默认为~/App_Data/XmlProfiles/.

下载代码里包含了一个测试的web应用程序,指导如何将自定义的XmlProfileProvider class类与默认的SqlMembershipProvider class类协调使用.

结语:
在本文我们看到如何利用provider model来创建以用户自定义的Profile provider,它将用户属性设置保存为XML文件而不是一个数据库.

祝编程快乐!


分享到:
评论

相关推荐

    asp.net 2.0编程珠玑--来自mvp的权威开发指南

    7. **成员资格(Membership)和角色(Roles)**:提供了预建的用户身份验证和授权服务,简化了网站的安全管理。 8. **状态管理**:包括ViewState、Session、Cookie和Query String等,提供了多种方法来保存和恢复...

    ASP.NET2.0数据库项目案例导航

    在ASP.NET 2.0中,可以使用预建的身份验证和授权组件,如Membership、Roles和Profile,来轻松实现用户注册、登录、密码找回和权限控制等功能。通过自定义表单身份验证,开发者可以创建符合特定业务需求的用户验证...

    Asp.Net2.0网站开发实战.iso

    《Asp.Net2.0网站开发实战》是一个深入学习Asp.Net 2.0技术的教程资源,以ISO格式提供,原始大小超过50MB,但压缩后仅3MB。这个教程涵盖了Asp.Net 2.0的核心概念、开发工具和实际应用,是初学者和进阶开发者的重要...

    完全手册ASP.NET2.0网路开发详解(源码)

    7. ** membership 和 roles**:提供了内置的用户管理和角色管理功能,便于实现权限控制。 通过对“源码”和“典型系统”文件的深入学习,读者不仅可以掌握ASP.NET 2.0的基础知识,还能了解到实际开发中的最佳实践。...

    Asp.net 2.0模块四

    C24 - "Asp.net 2.0 Membership and Roles" 这个部分主要讲解Asp.NET 2.0中的成员资格(Membership)和角色(Roles)管理。成员资格提供了一种安全且灵活的方式来管理用户账户,允许开发者轻松地添加注册、登录、...

    精通asp.net2.0的典型模块的一些例子

    它将演示如何结合ASP.NET 2.0的各种特性,如 Membership、Roles 和 Profile,构建一个交互性强的社区平台。 8. **C22 - 错误处理与日志记录** 最后,C22可能会讲解如何优雅地处理程序中的错误,包括使用...

    asp.net2.0中一个简单的用户登录注册的例子

    7. **验证和安全**: ASP.NET 2.0提供了多种验证控件,如RequiredFieldValidator、RegularExpressionValidator等,用于确保用户输入的数据符合预期格式。此外,还要考虑密码强度、防止SQL注入等安全措施。 8. **角色...

    ASP.NET 2.0快速入门(1):ASP.NET 2.0介绍

    ASP.NET 2.0还包括了成员资格(Membership)、角色(Roles)和配置(Configuration)管理的增强。成员资格系统提供了一种标准的方式来管理用户账户,而角色系统则允许对用户进行分组并赋予不同权限。这为创建安全的...

    ASP.NET 2.0 开发技术大全 配套光盘-17-35

    ASP.NET 2.0是微软开发的一个用于构建Web应用程序的框架,它是在.NET Framework 2.0版本上构建的。这个框架提供了丰富的功能和工具,让开发者能够更高效地创建动态、交互式的网页和Web应用。"ASP.NET 2.0 开发技术...

    ASP.NET 2.0 配套光盘-008

    7. **会员和角色管理(Membership and Roles)**:ASP.NET 2.0提供了内置的用户身份验证和授权机制,简化了安全性和权限管理。 8. **状态管理(State Management)**:增强了视图状态、隐藏字段、查询字符串、会话...

    web应用开发asp.net 2.0 复习资料

    ASP.NET 2.0是微软推出的用于构建Web应用程序的框架,它是.NET Framework的一部分,提供了丰富的功能和工具,使得开发者能够高效地创建动态、交互式的Web应用程序。本复习资料旨在帮助初学者深入理解ASP.NET 2.0的...

    ASP.NET 2.0快速入门(6):ASP.NET 2.0 成员管理

    ASP.NET 2.0是微软开发的一个用于构建Web应用程序的框架,它极大地简化了Web开发过程,特别是对于那些需要用户身份验证和权限控制的应用。在ASP.NET 2.0中,成员管理是一个核心功能,它提供了强大的用户注册、登录、...

    ASP.NET2.0全程指南

    6. **会员、角色和配置文件**:ASP.NET 2.0增强了身份验证和授权功能,引入了会员(Membership)、角色(Roles)和配置文件(Profile)API,为用户管理提供了标准接口,支持多种身份验证模式,如Windows、Forms和...

    ASP.NET_2.0网站开发全程解析

    ASP.NET 2.0是微软推出的一种用于构建动态网站、Web应用程序和服务的框架,它基于.NET Framework,提供了高效、安全且可扩展的平台。在"ASP.NET 2.0网站开发全程解析"这本书中,作者深入浅出地介绍了ASP.NET 2.0的...

    深入挖掘ASP.NET 2.0系列课程(6):个性化定制ASP.NET 2.0

    2. **角色(Roles)**:除了用户管理,ASP.NET 2.0还支持角色管理,允许将用户分组到不同的角色中,然后根据角色分配权限。这使得权限控制更加灵活和方便。 3. **个人化(Personalization)**:个人化功能让开发者...

    ASP.NET2.0

    6. **会员(Membership)和角色(Roles)**:ASP.NET 2.0提供了内置的安全框架,包括会员管理、角色管理和权限控制,方便实现用户注册、登录和权限验证,适合于社区宽带用户管理。 7. **状态管理(State Management)**:...

    ASP.NET2.0源码

    3. ** Membership 和 Roles**:ASP.NET 2.0 引入了会员(Membership)和角色(Roles)框架,方便开发者处理用户身份验证和授权,支持多种身份验证模式,如Windows身份验证、 Forms身份验证等。 4. **站点导航**:...

    asp.net2.0论坛

    7. **成员资格(Membership)和角色(Roles)**:ASP.NET 2.0内置了强大的身份验证和授权服务,包括成员资格提供程序和角色提供程序,便于实现用户注册、登录、权限控制等功能。 8. **配置管理工具**:改进的Web....

Global site tag (gtag.js) - Google Analytics