zoukankan      html  css  js  c++  java
  • DotNetNuke 5 C#版本解读之3--DNN Membership

     好几天没写这一系列了。工作原因。。。
    前面几篇:
    1.  DotNetNuke 5 C#版本解读之1--架构介绍 
    2. DotNetNuke 5 C#版本解读之2--HTTP Modules
    Asp.net Membership说明:
    对于asp.net的开发人员来说asp.net membership 是再熟悉不过的了。相信很多项目中你都在使用membership来管理用户,权限组等。它是在.net framework 2.0
    中开始加入的。
    在framework 3.5中进行了安全性增强,目前它主要有如下几个功能:
    1. 用户登录控件等。2.用户管理。3。Membership Provider和Roles Provider。
    这些控件都已经在.net framework中封装好了。
                                  
    如果你对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时会有一步是选择你的membership provider是使用SQL Server还Active Directory,默认是SQL Server。

     

    DNN的Membership介绍:

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

    1.    Portals 应用程序:

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

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

     

    2.    Users和Roles的数据模型

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

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

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

     

    3.    Membership, Roles和Profile Providers

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

    1.  Membership Provider:

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

     

    主要的方法如下:

     

     

    属性如下:

     

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

    <membership defaultProvider="AspNetSqlMembershipProvider"

    userIsOnlineTimeWindow="15">

    <providers>

    <clear />

    <add name="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="Stores and retrieves membership data from the local

    Microsoft SQL Server database" />

    </providers>

    </membership>

    2.  Role provider:

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

     

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

    <roles defaultProvider="DNNRoleProvider">

    <providers>

    <clear />

    <add name="DNNRoleProvider"

    type="DotNetNuke.Security.Membership.DNNRoleProvider,

    DotNetNuke.Provider.DNNProvider"

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

    />

    </providers>

    </roles>

     

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

    3.  Profile Provider:

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

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

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

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

     

     

     

  • 相关阅读:
    Codeforces 1265A Beautiful String
    1039 Course List for Student (25)
    1038 Recover the Smallest Number (30)
    1037 Magic Coupon (25)
    1024 Palindromic Number (25)
    1051 Pop Sequence (25)
    1019 General Palindromic Number (20)
    1031 Hello World for U (20)
    1012 The Best Rank (25)
    1011 World Cup Betting (20)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1811692.html
Copyright © 2011-2022 走看看