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

        近期由于身心不适,一直没更新,现又拿起笔,继续这个系列……
 
         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在处理用户管理的时候还做了非常多的工作,这也不是一时半会儿能讨论清楚的,先在这里抛砖一下,更多高级应用还得需要大家慢慢体会。
posted on 2006-06-07 23:51  dragonpro  阅读(3699)  评论(6编辑  收藏  举报

Free Web Counter