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表中增加自己的定义字段,比如一些用户头像或者是自己的商业相关的字段。

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

     

     

     

  • 相关阅读:
    windows(64位)下使用curl命令
    ThinkPHP 3.2 性能优化,实现高性能API开发
    如何摆脱恨死人的低价竞争对手
    火狐浏览器如何js关闭窗口的几种解决方法
    当 Swoole 遇上 ThinkPHP5 世界你好
    TCP网络编程杂谈
    SQL语句操作优先级顺序
    记一次常规的Mysql数据库访问的时间分析
    CSS艺术字
    Eclipse Oxygen创建maven web项目(二)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1811692.html
Copyright © 2011-2022 走看看