DotNetNuke 5 C#版本解读之3--DNN Membership
2010-08-29 01:35
567 查看
好几天没写这一系列了。工作原因。。。
前面几篇:
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表中增加自己的定义字段,比如一些用户头像或者是自己的商业相关的字段。
这种设计非常方便以后的修改,特别是字段的长度已经正则表达式,显示顺序等都可以在表中定义:
相关文章推荐
- DotNetNuke 5 C#版本解读之3--DNN Membership
- DotNetNuke 5 C#版本解读之3--DNN Membership
- DotNetNuke 5 C#版本解读之3--DNN Membership
- DotNetNuke 5 C#版本解读之2--HTTP Modules
- DotNetNuke 5 C#版本解读之2--HTTP Modules
- 一起谈.NET技术,DotNetNuke 5 C#版本解读之--架构介绍
- DotNetNuke 5 C#版本解读之1--架构介绍
- DotNetNuke 5 C#版本解读之1--架构介绍
- DotNetNuke 5 C#版本解读之2--HTTP Modules
- DotNetNuke 5 C#版本解读之1--架构介绍
- DotNetNuke 5 C#版本解读之2--HTTP Modules
- DotNetNuke 5 C#版本解读之--架构介绍
- DNN(DotNetNuke)4.4 C# 版本地址
- DotNetNuke 5 C#版本解读之1--架构介绍
- 转载 -- DotNetNuke 5 C#版本解读之2--HTTP Modules
- 转载 -- DotNetNuke 5 C#版本解读之1--架构介绍
- DotNetNuke 4.x 最终版本DNN 4.9.2发布(附源码下载)
- DotNetNuke的C#版本
- 使用DotNetNuke(DNN) Startkit 4.7(及以上版本)安装无法完成问题的解决方法
- DotNetNuke与MemberShip的结合(五年版)第三步修改HttpModule.DNNMembership