近期由于身心不适,一直没更新,现又拿起笔,继续这个系列……
 
         CS中的用户及权限管理是比较复杂的,了解其中的用户及权限有关的机制对掌握CS的核心是至关重要的,现就对CS中的用户管理机制作一个简要介绍。
         CS是在Asp.Net1.1时代出现的,固然,在CS1系列中使用的权限机制是建立在微软MemberRole1.0之上的,那么在CS2中仍然沿袭了这一模块。不过我们可以看到CS2针对ASP1.1和Asp2.0做了两套方案,这样我们就可以在.net1.1状态下用MemberRole1.0在.net2.0状态下用ASP.NET2.0自带的MemberRole。那么CS2中是怎样做到这么灵活的配置的呢,下面就一一道来:
         前面一系列的文章提到在CS2中运用的一种很常见的模式-代理模式,代理模式诸多优点我就不在这里细说了,最突出的那就是可以在自己的规则里使用第三方组建,而不会直接依赖第三方组建,当第三方组建变动的时候,只需要改代理层即可,同样,在CS2处理MemberRole的时候也用到了此模式,下面我们就看看此模式带来了什么。
         让我们先来看看CommunityServerComponents这个项目,这个项目为CS的核心,里面定义了CS运行所需要的抽象类、接口、公用方法、实体类等等,显然要定义MemberRole的接口当然也应该在此定义了,这也符合接口倒置原则,接口的使用者定义接口,而不是提供者。打开项目里的\Components\Provider\User\文件夹,此文件夹内就是全部接口的定义和调用规则了:

上图调用MemberRole组建的所有接口定义,可以看出这里除了MemberRoleProfileProvider这个抽象类有实体方法外,其他都为接口定义,调用的时候当然是调用MemberRoleProfileProvider里面的实体方法了,这里的方法告诉我们通过配置找到需要加载的代理组建并适时加载:

static MemberRoleProfileProvider()
        {
            
                CSConfiguration config = CSConfiguration.GetConfig();
                Provider provider = config.Providers["MemberRoleProfileProvider"] as Provider;
                if(provider != null)
                {
                    if(Globals.IsNullorEmpty(provider.Type))
                        throw new Exception("MemberUserRoleProvider provider found, but no type attribute was specified");

Type type = Type.GetType(provider.Type);
                    if(type == null)
                        throw new Exception(string.Format("MemberUserRoleProvider Provider Type {0} could not be loaded",provider.Type));

murp = Activator.CreateInstance(type) as MemberRoleProfileProvider;
                    if(murp == null)
                        throw new Exception("MemberUserRoleProvider could not be loaded from the type " + provider.Type);
                }
        }

这个静态方法就是为了完成此项工作的了。
配置节点在CommunityServer.config里的providers的MemberRoleProfileProvider,这就告诉CS2需要使用哪个代理来处理MemberRole。

<add 
                    name = "MemberRoleProfileProvider"
                    type = "CommunityServer.MemberRole.CSMemberRoleProfileProvider, CommunityServer.MemberRole"
                />

好了,看完了接口我们不难猜到代理层应该做什么了,当然是实现这些接口了:

我们可以看到在CS2中有两个MemberRole代理层,一个是针对MemberRole1的,另一个则是针对ASP.NET2.0的MemberRole,这两个组件我们选择一个就行,具体选择什么我们就在配置文件里填上相应的组件的代理程序集(也就是上图显示的项目)就OK了,因为他们都正确的实现了CS定义的接口,需要说明的是,CS2默认使用MemberRole1.0,如果需要使用Asp.net2.0中的MemberRole则还需要运行项目里面的SQL脚本升级数据库。现在我们着重看看CommunityServer.MemberRole这个实现了MemberRole1.0的代理层:


        这里我们可以看到,在主要的CSMemberRoleProfileProvider里只引用了CSRoles、CSProfiles、CSMembership,那么其余的实现MemberRole怎样知道呢,这就需要在WEB.config中进行指定,打开WEB.config文件我们可以看到在configSections节点有如下的配置:

<sectionGroup name="memberrolesprototype">
            <section name="membership" type="Microsoft.ScalableHosting.Configuration.MembershipConfigHandler, MemberRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7c773fb104e7562" />
            <section name="roleManager" type="Microsoft.ScalableHosting.Configuration.RolesConfigHandler, MemberRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7c773fb104e7562" />
            <section name="profile" type="Microsoft.ScalableHosting.Configuration.ProfileConfigHandler, MemberRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7c773fb104e7562" />
            <section name="anonymousIdentification" type="Microsoft.ScalableHosting.Configuration.AnonymousIdConfigHandler, MemberRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7c773fb104e7562" />
        </sectionGroup>

还有在profile节点的
<providers>
                <add name="CommunityServerSqlProvider" type="CommunityServer.MemberRole.CSProfileProvider, CommunityServer.MemberRole" connectionStringName="SiteSqlServer" applicationName="dev" description="Stores and retrieves profile data from the local Microsoft SQL Server database" />
            </providers>

这些就是告诉系统需要怎样调用MemberRole了
        通过配置好上面的各项,就可以在系统里实现其基本的用户管理了,当然我们会看到CS2在处理用户管理的时候还做了非常多的工作,这也不是一时半会儿能讨论清楚的,先在这里抛砖一下,更多高级应用还得需要大家慢慢体会。

转载于:https://www.cnblogs.com/Dragonpro/archive/2006/06/07/420116.html

Community Server系列之九:CS2中的用户管理1(MemberRole)相关推荐

  1. mysql user.isd_如何实现MySQL中的用户管理

    如何实现MySQL中的用户管理 MySQL有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作MySQL数据库必须要走的第一步,对于一个熟悉SQL基本操作的人来说,也是MySQL所有的知识中 ...

  2. MySQL中的用户管理

    MySQL中的用户管理 MySQL是一个多用户的数据库系统,按权限,用户可以分为两种:root用户,超级管理员.有root用户创建的普通用户: 一.MySQL创建用户 Create user 用户名 ...

  3. Windows Server 2012和Windows 8中的远程管理

    说到对Windows Server 2012和Windows 8的远程管理,记得当我还是菜鸟的时候狭隘的理解为等同于对系统通过微软终端服务MSTSC实现的基于RDP协议的远程桌面管理,或者就是Micr ...

  4. 如何将Windows Server域(AD活动目录)中的用户导出并导入至Outlook2010通讯簿

    在企业中如何同步所有的用户至邮件联系人,尤其是在增加了新员工的情况下是一个很常见的问题,解决办法之一就是将域用户中所有用户的Email加入至邮件客户端的通讯簿中.Windows 域用户管理在企业中有着 ...

  5. Laravel大型项目系列教程(二)之用户管理

    Laravel大型项目系列教程(二) 一.前言 本节教程将大概实现用户的注册.修改个人信息.管理用户功能 二.Let's go 1.创建用户注册视图 <span style="font ...

  6. Linux系统中的用户管理(一)

    一.用户管理 用户存在的意义: 系统用户即系统的使用者,用户管理是对文件进行管理,用户的存在是为回收权力. 组存在的意义: 组的存在是为了共享权力,组和用户是两个不同的机制. 组的分类: 初始组 用户 ...

  7. Part1.4——Linux系统中的用户管理

    目录 一.用户及用户组存在的意义 1.用户存在的意义 2.用户组存在意义 三.用户切换 1.用户查看命令 2.用户切换 四.用户涉及到的系统配置文件 五.用户和用户组的建立及删除 1.建立监控用户操作 ...

  8. 计算机右键管理中没有用户管理,我的电脑右键菜单中没有管理选项如何解决? 我的电脑右键菜单中没有管理选项解决的方法有哪些?...

    今天给大家带来我的电脑右键菜单中没有管理选项如何解决?,我的电脑右键菜单中没有管理选项解决的方法有哪些?,让您轻松解决问题.         在操作电脑时,经常会使用系统工具,对系统进行设置或整理,如 ...

  9. linu系统中的用户管理

    用户以及用户组存在的意义 1):用户存在的意义 系统资源是有限的,如何合理分配系统资源? 在这个问题解决时必须要有连个资源配合 1.身份 account 2.授权 author 3.认证 auth 3 ...

最新文章

  1. Linux下使用crontab命令以及Python脚本实现自动签到
  2. java 进阶 知乎_(二)零基础写Java知乎爬虫之进阶篇
  3. 编程语言成功的几大要素
  4. android服务常驻后台,android-如何始终在后台运行服务?
  5. walle多渠道打包+Tinker(bugly)热更新集成+360加固(乐固)
  6. vector容器中添加和删除元素
  7. -rw-r--r--@ what's @
  8. 最新手机号段 归属地数据库(20191210,共439265条,包括最新的号段)
  9. 朴素模式匹配算法和KMP匹配算法 详细
  10. 安装这5个插件后,PyCharm好用到起飞
  11. 龙卷风代码html,龙卷风旋涡.html
  12. 计算机内打不开小米路由器,win7系统无法访问小米路由器的解决方法
  13. 通信算法之九:4FSK调制解调仿真链路
  14. 计算机8421法转换,8421bcd码转换二进制
  15. Apple 授权登录
  16. SQL函数---SQL UCASE()
  17. pandas学习笔记1—categories与set_categories
  18. 易语言多线程大漠多线程模板脚本延时
  19. 创建线程:pthread_creat() 函数介绍
  20. matlab图片快速傅里叶变换,图像傅里叶变换(快速傅里叶变换FFT) | 学步园

热门文章

  1. Python命令行补全设置
  2. OSPF路由配置实例
  3. mysql如何提高其查询速度的方法
  4. 【转】解决 java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I 问题
  5. mass Framework pagination插件
  6. 专家解析:如何防范隐私信息泄露
  7. 我练习项目眼中的 vue
  8. commons-lang3-3.2.jar中的常用工具类的使用
  9. ASA防火墙学习笔记1-基础篇
  10. 关于机器学习中的一些常用方法的补充