随笔-40  评论-377  文章-0  trackbacks-10
 为什么要做用户系统

几乎每个应用都会用到用户系统。如果能够进行通用化,自然是一种很快意的事了。然而到目前为止我还没有找到一个让我满意的类似的东西。不是说它们不够好,而在于它们不能满足管理和部署上的可伸缩性、灵活性及与现有应用的可集成性上,所以只好自己做了一个。

用户系统的组成

用户系统在设计上是有三部分组成的,用户基础信息管理、用户库管理、用户组管理。大家可能会对“用户库”和“用户组”感到疑惑,觉得不应该同时出现这两个东西,或者只用一个就可以了。然而这是为了满足“可伸缩、灵活”特征而特意设计的。下面分别就这三部分做一个说明。

用户基础信息,没有特别的,为了实现单点登录,以使各种不同的应用进行统一的用户登录验证,我们只提供简单的登录名、密码、昵称等信息。这些信息存储在中心库上。我们可以指定管理员来对整个用户数据进行管理,这对一般的应用来讲就可以了,但当一个大型的企业,每个部门都可以对自己部门进行独立的人员管理,这时就需要扩展我们的设计。

为此我提供了用户库,总部可以创建用户库,然后对用户库进行授权,让各部门管理各自的用户库,这样就实现了用户管理的独立性和伸缩性。用户库只能用于新建、编辑、删除用户,不能做其它的事情。用户库(实际上是一个表)的存储也位于中心库上。需要注意的一点是,用户库是属于平台管理的范畴,不属于某一特定的应用。

用户组只是多个不同用户或用户组的集合,用户组中的用户可以来源于任何一个用户库。它只能添加或移除用户,而不能“新建”和“删除”用户。这一点非常重要,否则用户系统的管理会非常的混乱。用户组的一个重要应用是建立一个“稳定的授权模型”,以简化管理员的工作。

用户组的复杂性和伸缩性远远超出了用户库的设计。主要有两点:

用户库中的数据不需要分布式存储,而用户组却需要。用户组可以有平台级的管理范畴,同时每个应用系统又都可以管理各自的用户组数据。全部将这些数据进行集中存储是不科学的,会给中心带来不必要的数据库维护任务,最好的做法就是各应用存储在各应用自己的系统库中,这就要求用户组的存储是分布式的。

用户库之间是平等的,而用户组之间的关系是交叉的。用户库没有父级用户库的概念,大家都是平等的。而一个用户组可能属于多个用户组。

设计要点

用户系统的设计总体上贯彻平台架构中讲到的“应用与WS分离”及“WS与数据库分离”两条宗旨。用户组的分布式存储便是一个很好的应用,我们只有一个用户组相关的WS便可以操作分布在不同位置上的数据库。

其实用户组WS和用户库WS是用的同一个WS,这就是我要给大家讲的容器系统。“容器”系统是抽象后的概念,我定义它可以管理三种结构的数据形态。

一、一维结构。容器之间是平等的,没有包含与被包含之分,如用户库系统。

二、树结构。每个容器可以有一个或零个父容器,如各种分类信息。

三、多父结构。每个容器可以有多个或一个或零个父容器,但不能形成循环,如用户组系统。

为了使用容器系统,我们必须要遵守一定的规范。

一、用容器系统提供的模板数据表进行应用数据表的创建,这里对用户库系统为每个创建的数据表名称冠以“UserLib”前辍,为每个用户组系统创建的数据表名称冠以“UserGroup”。

二、使用平台规范的自定义DBInfoSoapHeader,进行数据库信息的传递,这个类中除了包含数据库连接信息之外还提供了表名称前辍字段。这样才能在中心数据库中即能访问用户库数据又能访问用户组数据。当然对用户组来讲应用系统库中也存在着用户组数据。

用户系统中另一个共用的设计是有效时间,它允许限制用户及用户组在某一时间段内的可用性。有效时间模块用一个WS来表示,但他不直接被客户端使用,而是作为父类被其它类继承。这是因为有效时间在意义上不能是一个独立系统,另外一个重要原因在于提高系统的性能,以减少不必要的WS服务之间的访问开销,及提供事务处理功能。

我们在进行用户管理时,会经常用到“删除用户”的功能,但这个功能在用户系统中会有些麻烦。用户系统是服务于多个应用的,当删除一个用户时,与用户关联的应用数据会形成“孤儿”!如何防止此问题的发生呢?

数据依赖系统是解决此问题的专用模块。用户系统是不了解应用的业务逻辑的,这件事情只能由应用自己去处理关联的数据。不同的应用将关联关系注册到数据依赖系统中,在进行用户删除时,用户系统查询数据依赖系统中与用户关联的注册。如果存在注册,则调用所注册的处理单元,等到所有的处理单元都成功处理才能将此用户进行删除;如果没有注册,则直接进行用户的删除。不过因为时间关系,目前数据依赖系统并没有实现!只能将不需要的用户先暂时禁用了。

这里只是讲了用户系统的技术点,要让用户系统更方便的使用还要涉及到平台中的其它内容,如数据库冗余系统,WS地址服务系统等。

注意的问题

一、用户信息的扩展。

在平台用户系统中,用户信息是以保证用户能够实现统一用户验证而设计的,这同时也说明他不能全面的说明用户的基本情况,尤其是一些专业领域的系统。如银行及保险中的用户家属信息,社交网站中的兴趣爱好等。对于这些信息需要由外部应用自身来扩展。为了有好的用户体验及提供很好的集成性,用户系统提供一个“用户详细信息”的事件供应用来实现。

二、基于.NET的使用。如果应用使用.Net进行开发,那么用户只需要使用CommonWare.Dll文件就可以了。这里面已经封装了很好的客户端相关的实现。它体现了“应用与WS分离”的设计理念。

三、基于跨平台的使用。如果应用不是使用.Net进行开发,那么只好进行WS的直接调用了。
 

相关文章

平台我的编程人生à产品à项目

平台架构——体系结构

Tag标签: .net,架构
posted on 2008-04-21 10:19 李学斌 阅读(4162) 评论(25)  编辑 收藏 网摘 所属分类: 想法、观点透视架构

评论:
#1楼 2008-04-21 10:22 | 王孟军!      
想法不错哦,
但最好做成产品,
要知道,我们这帮人,喜欢拣 "现成的"
:)

  回复  引用  查看    
#2楼 2008-04-21 10:29 | pwqzc[未注册用户]
支持抱小孩!
  回复  引用    
#3楼 2008-04-21 10:38 | MarkZT      
可以考虑membership来进行管理 基本满足 灵活,可伸缩等特点!
  回复  引用  查看    
#4楼[楼主] 2008-04-21 10:43 | 李学斌      
@王孟军!
呵呵,产品化是要做的,只是时间的问题。

  回复  引用  查看    
#5楼 2008-04-21 10:44 | Leepy      
支持一下,思路挺好!
  回复  引用  查看    
#6楼 2008-04-21 10:53 | 李战      
http://www.cnblogs.com/Emoticons/qface/055243188.gif" alt="" />楼主的文章正好给俺指明了方向!
俺目前正在设计多网站的用户管理及权限控制结构,楼主的很多想法与俺不谋而合啊。http://www.cnblogs.com/Emoticons/msn/teeth_smile.gif" alt="" />
俺是个急性子,只知道战,只管往前冲。而楼主又学文又学武,不慌不忙,运筹帷幄啊。http://www.cnblogs.com/Emoticons/msn/thumbs_up.gif" alt="" />
向你学习!http://www.cnblogs.com/Emoticons/msn/tongue_smile.gif" alt="" />


  回复  引用  查看    
#7楼 2008-04-21 12:59 | 侯垒      
学习了,也正在学习这些.
  回复  引用  查看    
#8楼 2008-04-21 13:09 | Clark Zheng      
没有角色的概念?
  回复  引用  查看    
#9楼 2008-04-21 13:33 | Leem      
看起来有点复杂,能不能画个图做说明.
  回复  引用  查看    
#10楼 2008-04-21 13:57 | zoti      
用戶系統?樓主是指RBAC嗎?
  回复  引用  查看    
#11楼[楼主] 2008-04-21 14:21 | 李学斌      
@Clark Zheng
角色是权限系统里面的概念,它在平台里面是一个独立的系统,这一点在我前面的文章中已经提及。我会在后面的文章中做详细说明,
@Leem
不要想的太复杂,我前面的文章里面有层次结构的图。
@zoti
其实我不了解RBAC,查了一下。感觉这里的用户系统只是RBAC中的用户,没有权限的内容。不过我的权限系统会有别于RBAC中的内容:)

  回复  引用  查看    
#12楼[楼主] 2008-04-21 14:40 | 李学斌      
@李战
我只不过是学以致用,仁兄则是驰骋疆场的英雄豪杰。在下不如!

  回复  引用  查看    
#13楼 2008-04-21 14:41 | Clark Zheng      
@李学斌
我总觉得用户系统是和权限系统关系很紧密的,如果不做权限控制单弄出个用户系统干什么用?

  回复  引用  查看    
#14楼[楼主] 2008-04-21 15:01 | 李学斌      
@Clark Zheng
所言极是,可以说两者走的最近,但设计还是可以分开的。

  回复  引用  查看    
#15楼 2008-04-21 17:00 | @@[未注册用户]
我看不懂
  回复  引用    
#16楼 2008-04-21 17:11 | gg[未注册用户]
Active Directory
  回复  引用    
#17楼 2008-04-21 17:30 | caicai43[未注册用户]
问一个菜菜的问题,所谓的面向切面编程是不是和这个开发方法有点类似?既站在系统的角度上,对功能解耦?
  回复  引用    
#18楼[楼主] 2008-04-21 17:56 | 李学斌      
@caicai43
与AOP没有关系

  回复  引用  查看    
#19楼 2008-04-21 20:32 | 镜涛      
等待具体产品发布中,要是有产品,有演示,就形象多了!
  回复  引用  查看    
#20楼 2008-04-22 00:07 | 香蕉皮
有点乱
  回复  引用    
#21楼 2008-04-22 22:51 | 蜗牛身上的一只蚂蚁      
嘿嘿。近三天的时间我得弄出一个这样的小DEMO来啊。公司急。。。嘿嘿。。。
  回复  引用  查看    
#22楼 2008-04-26 19:46 | 很烂的鸟[未注册用户]
<a href="http://www.xc010.com">北京学车网</a> 期待能用你的系统来实现用户的整合
  回复  引用    
#23楼 2008-04-26 19:47 | 很烂的鸟[未注册用户]
http://www.xc010.com 北京学车网 期待能用你的系统来实现用户的整合
  回复  引用    
#24楼 2008-04-29 16:07 | StephenJu      
好文章,一直关注着!!谢谢大哥发表!学习了!
  回复  引用  查看    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1163434




相关文章:

相关链接: