您的位置:首页 > 编程语言 > C#

DotNetNuke 5 C#版本解读之3--DNN Membership

2010-08-29 01:35 567 查看
DotNetNuke5C#版本解读之3--DNNMembership
好几天没写这一系列了。工作原因。。。

前面几篇:

1.DotNetNuke5C#版本解读之1--架构介绍

2.DotNetNuke5C#版本解读之2--HTTPModules

Asp.netMembership说明:

对于asp.net的开发人员来说asp.netmembership是再熟悉不过的了。相信很多项目中你都在使用membership来管理用户,权限组等。它是在.netframework2.0

中开始加入的。

在framework3.5中进行了安全性增强,目前它主要有如下几个功能:

1.用户登录控件等。2.用户管理。3。MembershipProvider和RolesProvider。

这些控件都已经在.netframework中封装好了。


如果你对membership不是很了解,提供你如下几篇文章,供参考:

http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx

http://www.sosuo8.com/article/show.asp?id=850&page=0
http://www.silverlightshow.net/items/Leveraging-the-ASP.NET-Membership-in-Silverlight.aspx

http://mvcmembership.codeplex.com/


你在安装DNN时会有一步是选择你的membershipprovider是使用SQLServer还ActiveDirectory,默认是SQLServer。

DNN的Membership介绍:

当然DNN本身的数据结构以及它的一些Services注定了它不能直接使用.net提供的Membership。

1.Portals和应用程序:

DNN允许一个站点上有多个portal,每个portal都有自己的用户和角色管理,portal的唯一标识是PortalID。默认的.netmembership/RolesPorvider它并不支持多个portal各自拥有自己的用户和角色管理。

DNN开发团队于是想到了一个办法解决这个问题,就是让DNN的每个portal作为一个虚拟的Application使用。当像Membership/RolesProvider发送请求时,传递过去的参数是PortalID,这样就能够得到当前这个portal自己的Users和Roles。代码如下;



2.Users和Roles的数据模型

如果完全使用Membership/RolesProvider,那么用户和角色管理的信息就必须和DNN的应用程序的一些配置数据存储分离,Membership需要有自己的数据存储。例如:DNN可能是使用SQLServer作为他的数据库来存储数据和一些配置等,但是Membership/RolesProvider可能会其它方式来存储用户信息和角色信息。

之前我们做过一个项目是用DNN3.3.4的,客户要求使用Windows认证,所以当时就为了能够让DNN本地的密码和AD域的密码能同时被初始化而花费了客户一笔钱做SSO。数据访问层你如果想让DNN的数据和membership的数据同时更新,是比较麻烦的。而在DNN后来的版本中,商业逻辑层的修改让上面那些担心都不必要了。

DNN的user信息表等不能Membership的user信息表取代是因为这些表和其它的表关联非常大。比如在User表中有个UserID字段,它是用来标示用户唯一的。基本上这个字段在DNN的所有核心模块中都有用到。所以你如果现在完全使用Membership的权限管理而放弃DNN的User表,意味着整个核心模块都得修改。。。最终的解决方案是让DNN的表对应到Membership/RolesProvider的表,如下图:



3.Membership,Roles和ProfileProviders

DNN5默认的使用ASP.NETSqlMembershipProvider使用的功能确实是System.Web.Security.Membership命名空间中的功能,但是它没有直接调用这里的方法而是调用了在DotNetNuke.Security.Membership这个命名空间中的SqlMembershipProvider方法。它是在原来的Membership方法基础上增加了让asp.net的表和DNN的表直接数据同步的功能。

1.MembershipProvider:

MembershipProvider的功能是与存储过程通信,能够把新增,删除,用户身份认证和更改密码。DNN的MembershipProvider是继承了System.Web.Security下面的Membership类。Cs文件位置如下:



主要的方法如下:



属性如下:



这些属性的值可以再web.config中的membership节点部分配置:

<membershipdefaultProvider="AspNetSqlMembershipProvider"

userIsOnlineTimeWindow="15">

<providers>

<clear/>

<addname="AspNetSqlMembershipProvider"

type="System.Web.Security.SqlMembershipProvider"

connectionStringName="SiteSqlServer"

enablePasswordRetrieval="true"

enablePasswordReset="true"

requiresQuestionAndAnswer="false"

minRequiredPasswordLength="7"

minRequiredNonalphanumericCharacters="0"

requiresUniqueEmail="false"

passwordFormat="Encrypted"

applicationName="DotNetNuke"

description="Storesandretrievesmembershipdatafromthelocal

MicrosoftSQLServerdatabase"/>

</providers>

</membership>

2.Roleprovider:

RoleProvider提供的功能主要是增加,删除一个role,为某个role添加或是删除user等。



在web.config中你可以配置roleprovider的路径:

<rolesdefaultProvider="DNNRoleProvider">

<providers>

<clear/>

<addname="DNNRoleProvider"

type="DotNetNuke.Security.Membership.DNNRoleProvider,

DotNetNuke.Provider.DNNProvider"

providerPath="∼\Providers\MembershipProviders\DNNMembershipProvider\"

/>

</providers>

</roles>

如果你有自己的Roleprovider只需要更改这里的路径。

3.ProfileProvider:

这个Provider主要是用来把用户的信息用存储过程存储到数据库,并能够通过用户的ID得到用户的信息,以方便admin权限的用户管理用户。

DNN5以前的版本中,Profile的属性都在web.config中配置,但是到了5有了改变,它新增了一个表叫ProfilePropertyDefinition。

你如果想定义自己的ProfileProvider,你可以在ProfilePropertyDefinition表中增加自己的定义字段,比如一些用户头像或者是自己的商业相关的字段。

这种设计非常方便以后的修改,特别是字段的长度已经正则表达式,显示顺序等都可以在表中定义:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: