工作流权限管理方法论

    昨天中午吃饭时和一位同学谈论了权限管理的问题,在他的一个ERP项目中,要涉及很精细的权限控制,而他要负责抽象出一套比较通用的权限框架,用户权限一直是ERP开发中比较头痛的问题,而恰恰他的这个项目的用户权限需求又非常精细。甚感为难。

    恩......问题在哪里?回来后我也仔细思考了,我们未来向ERP领域进军,势必也要面对这样的问题。找出一套解决方案是很必要的。

    我不是一个喜欢循规蹈矩的人,这既是优点也是缺点。

    从抽象层次来讲,软件是一个很典型的轮回模型,小到OO的模型,大到未来的SO模型,一直是在资源、处理机环境(人还是CPU(OO层次),人还是面向服务的系统(SO层次))和处理方法中轮回,在哲学意义上,正好体现的是空间和物质(资源),时间(处理机环境)和物质联系(方法)。

    所以,权限管理本质上属于物质联系,属于工作流的,我们在抽象时必须非常清楚这个本质问题。权限管理本质上是用户资源和表单资源之间的相互联系,我们在设计工作流的时候就要好好想想了,权限管理应该在工作流的外面还是里面?当然,权限管理是特殊的,特殊性的根本原因不是因为它是个不同于工作流的另类的东西,而是在于一个工作流基本上都是由用户来发起的,属于工作流最初的起点部分,这样的场景才是权限管理特殊性的本质所在。而我们在实际处理的时候往往将权限管理从工作流中剥离出来,以至于很多企业想做一个通用的权限管理框架,我觉得这会有很大的难度。因为你要涉及权限管理就要处理用户资源,不同的系统的用户资源的表示方式是不一样的,与表单资源之间的联系也是不一样的。

    所以,一套软件系统的权限管理是和用户实际体系运作强绑定的,强行剥离去耦势必会带来很大麻烦。我的处理建议是,既然理论上已经讲明白权限体系很难单独从实际工作流中剥离出来,不如顺其自然,老老实实将它包括在实际的工作流里,利用WF这样基础的工作流平台的快速便捷性,降低项目开发、管理、维护成本。

posted @ 2008-07-07 12:31 王弈博 阅读(2090) 评论(22)  编辑 收藏 所属分类: WF

  回复  引用  查看    
#1楼 2008-07-07 12:52 | 金色海洋(jyk)      
好像没说到底要怎么做呀。
  回复  引用    
#2楼 2008-07-07 13:21 | A.Z! [未注册用户]
LZ的意思是量身定制,LZ的名字蛮个性的。
  回复  引用    
#3楼 2008-07-07 13:30 | haio, [未注册用户]
>老老实实将它包括在实际的工作流里,利用WF这样基础的工作流平台的快速便捷性,降低项目开发、管理、维护成本

老老实实写代码就无所谓方法论了,这样的写法是提高开发管理和维护的成本。
如果老老实实写,软件可能还在二进制时代呢。
  回复  引用    
#4楼 2008-07-07 13:39 | Hello, [未注册用户]
--引用-------------------------------------------------- haio,: >老老实实将它包括在实际的工作流里,利用WF这样基础的工作流平台的快速便捷性,降低项目开发、管理、维护成本 老老实实写代码就无所谓方法论了,这样的写法是提高开发管理和维护的成本。如果老老实实写,软件可能还在二进制时代呢。 --------------------------------------------------------


呵呵,抽象、去耦是要有前提条件的,有些东西本身就很难去耦,又何必去做得不偿失的事情?
  回复  引用  查看    
#5楼 2008-07-07 13:59 | yushih      
Denning的A Lattice Model of Secure Information Flow算不算把权限管理抽象出来了?
  回复  引用  查看    
#6楼 2008-07-07 14:30 | kiler      
说白了,lz就是不想做这个东西。
  回复  引用    
#7楼 2008-07-07 15:02 | Hello, [未注册用户]
--引用-------------------------------------------------- yushih: Denning的A Lattice Model of Secure Information Flow算不算把权限管理抽象出来了? --------------------------------------------------------


恩,能否简单说一下这个模型以及如何应用?能否屏蔽需求变化。
  回复  引用  查看    
#8楼 [楼主]2008-07-07 15:03 | 王弈博      
--引用-------------------------------------------------- kiler: 说白了,lz就是不想做这个东西。 --------------------------------------------------------


呵呵,这都被你猜到了。
  回复  引用  查看    
#9楼 [楼主]2008-07-07 15:19 | 王弈博      
--引用-------------------------------------------------- kiler: 说白了,lz就是不想做这个东西。 --------------------------------------------------------


其实我很想弄一套权限框架出来,这样以后就省力了,每次都弄一套难道就省力?关键问题是权限实际上是用户资源和表单资源的相互关联,每套系统这些东西都是不一样的,即便你将权限操作从工作流里挖出来,真的就能去耦了吗?需求的改变难道不会影响抽象出来的这个权限模块?如果影响了,那你这种将一个变化点分割成两个变化点的做法是否妥当?是否真的就比死写每个工作流代码量少?还是比死写清晰易于维护?

听听大家意见。


  回复  引用  查看    
#10楼 2008-07-07 21:42 | 金色海洋(jyk)      
权限是一定可以做成通用的,我就实现一半了。

如果我在做几个工作流方面的项目,那么就可以吧剩下的一半也做出来。

http://www.cnblogs.com/jyk/category/134224.html

我的权限。
  回复  引用  查看    
#11楼 2008-07-07 21:43 | kiler      
@王弈博
与工作流相关联的权限要做好确实不是一个容易的事情,在做好这个权限前必须先做好一个东西能实现一个自定义电子表单模块,以及对于业务数据字段的管理。只有把前面这个东西做好以后才能做出一个比较完美的工作流权限框架。将来要是sharepoint比较成熟了,可以考虑直接调用sharepoint的list的api,这样可以省不少事。

  回复  引用    
#12楼 2008-07-08 07:47 | lzppcc [未注册用户]
  回复  引用  查看    
#13楼 2008-07-08 09:17 | good man      
学习
  回复  引用  查看    
#14楼 [楼主]2008-07-08 09:27 | 王弈博      
--引用-------------------------------------------------- kiler: @王弈博与工作流相关联的权限要做好确实不是一个容易的事情,在做好这个权限前必须先做好一个东西能实现一个自定义电子表单模块,以及对于业务数据字段的管理。只有把前面这个东西做好以后才能做出一个比较完美的工作流权限框架。将来要是sharepoint比较成熟了,可以考虑直接调用sharepoint的list的api,这样可以省不少事。 --------------------------------------------------------


恩,是这样的,必须能有效地抽象和管理业务数据字段,有关这方面的问题我会继续深入,希望能提出新的想法供大家讨论。
  回复  引用  查看    
#15楼 [楼主]2008-07-08 09:43 | 王弈博      
@金色海洋(jyk)


你那个权限管理模块很清楚,通用性上也不错。

只是你这个权限系统属于“方法级”的权限,也就是说可以有效的定义和管理那种用户可以执行什么样的操作。但有的时候权限需求是很细的,比如有的客户会有这样的要求:金额小于1000时,科级干部可以直接审批,大于1000时,必须申报上级部门,支付日期小于3天的需要总经理审批,大于3天的需要副经理批准。

这样的权限需求是很细的,细到表单的字段。其实我文章一开始的意思就是说:如果面对这样细致的权限需求,可能传统的权限框架就应付不过来了。你可以分离出这样的模块来,但始终你必须面对和实际业务体系的强相关性,如何有效的管理和抽象而不至于导致将一个变化点分割为两个变化点是个很棘手的问题。

我的思路就是,还原权限管理本来的位置,将用户资料看成和表单一样的资源来处理,死写在每个版本的工作流里。

上面kiler的建议是不错的,我会继续思考这一问题。
  回复  引用    
#16楼 2008-07-08 15:03 | walter1 [未注册用户]
前两天看这篇文章,没看明白,今天看了你上个回复,才搞清楚,你把一些概念搞混了。

你开篇提到ERP的权限,这个权限是数据访问的权限,控制用户能访问到那些数据,能修改那些数据。

你在上个回复中的提到的不同的级别审批不同的金额,是审批的权限,控制流程的流转。

这两个权限是概念就是完全不同的,实现的方法也是完全不同的,但都是可以实现的。


  回复  引用  查看    
#17楼 [楼主]2008-07-08 15:54 | 王弈博      
--引用-------------------------------------------------- walter1: 前两天看这篇文章,没看明白,今天看了你上个回复,才搞清楚,你把一些概念搞混了。 你开篇提到ERP的权限,这个权限是数据访问的权限,控制用户能访问到那些数据,能修改那些数据。 你在上个回复中的提到的不同的级别审批不同的金额,是审批的权限,控制流程的流转。 这两个权限是概念就是完全不同的,实现的方法也是完全不同的,但都是可以实现的。 --------------------------------------------------------


恩,我知道你的意思,但这两者本质是相同的,只是一个是针对方法、大的资源集合级别的,比方说只能由财务经理使用查询所有职员的工资的功能,但现在客户需求变了,变成“财务经理查看所有非总经理亲戚员工工资的信息”和“总经理查看所有自家亲戚员工的工资”,而你原来的数据库表的设计肯定没想到用户会有这样变态的需求,你仍旧是一张员工工资表。你说这是属于流程的还是属于权限的?那如果做成两张表,一张是“普通员工的”,一张是“领导亲戚”,那这样是权限的还是流程的?

权限实质上定义的是资源之间的相互作用关系,本质上就是流程的,只是一般的应用场景粒度大,每个流程都需要权限认证这一过程,所以你容易分割,将它独立出来统一管理,可当粒度一旦精细,你如何处理?我的观点就是,如果涉及非常精细的权限需求,不如将权限认证还原到本来的地方。

如何处理涉及到资源的粒度问题,但无论资源是一个数据库,还是一张表,还是一张表中某个字段相同的一类数据,权限都是属于流程的,并不是你说的针对几张表的权限就叫权限,针对一张表中某个字段相同的一类数据就不叫权限而叫流程了。照你的理解,我可以轻易的将资源的粒度变换一下,这时候你原来所理解的流程控制是不是又变成你所理解的权限控制了?

最重要的认识就是:权限认证本质上就是用户资源和其他资源之间的相互作用关系,是流程的!能不能分割出来是要看具体环境的。

不知道我有没有说清楚。

还有就是你说的那个“审批的权限”,审批是用户发起的,在做架构设计时应该是:“审批流程中各种用户的操作权限控制”,仍然是处理用户资源和表单资源之间关系的问题。
  回复  引用  查看    
#18楼 2008-07-08 17:42 | 吉日嘎拉      
我一直研究这些东西,有5-6年的经验了,很通用的东西,我手上就有,
若有兴趣,可以联系我
  回复  引用    
#19楼 2008-07-09 09:01 | it_lwj [未注册用户]
不知道大家的权限控制到那个级别的,目前我做到的系统,权限只控制到列...不知道那位大家把权限能动态的控到的行...还请指教呀
  回复  引用    
#20楼 2008-07-09 14:23 | walter1 [未注册用户]
实现一个系统首先要确定目标和采用的方法。

目标就是实现当前的共性的需求,太个性化的需求只能按项目定制,不应该做到平台里;

方法是把复杂的问题分解成几个相对简单的问题,分散解决。
1、审批权限
就是一张部门经理、流程的审批权限表,某个部门经理审批后,从这张表里取出他对该流程的权限,在流程中和某个预设值比较,不同的结果走不同的分支。
2、页面的打开权限
这个大家差不多,有权限的可以看见页面,没有的看不见。
3、页面内的操作权限
这部分是页面内实现的,根据权限显示相应的功能按钮,甚至于可以控制到字段级。

我们实现的平台里包括了以上的三类权限控制,已经用在了四、五个项目,除了第3点需要少量的代码,其他都不需要。

所以你想把三个做到一起,在我看来这种方法是不适合的,另外你提到的那些特殊的需求,也不适合实现为通用的,而应该订制。
  回复  引用    
#21楼 2008-07-09 14:29 | 王弈博马甲 [未注册用户]
--引用-------------------------------------------------- walter1: 实现一个系统首先要确定目标和采用的方法。 目标就是实现当前的共性的需求,太个性化的需求只能按项目定制,不应该做到平台里; 方法是把复杂的问题分解成几个相对简单的问题,分散解决。 1、审批权限就是一张部门经理、流程的审批权限表,某个部门经理审批后,从这张表里取出他对该流程的权限,在流程中和某个预设值比较,不同的结果走不同的分支。 2、页面的打开权限这个大家差不多,有权限的可以看见页面,没有的看不见。 3、页面内的操作权限这部分是页面内实现的,根据权限显示相应的功能按钮,甚至于可以控制到字段级。 我们实现的平台里包括了以上的三类权限控制,已经用在了四、五个项目,除了第3点需要少量的代码,其他都不需要。 所以你想把三个做到一起,在我看来这种方法是不适合的,另外你提到的那些特殊的需求,也不适合实现为通用的,而应该订制。 --------------------------------------------------------


恩,是这样的,受教了,呵呵。
  回复  引用    
#22楼 2008-07-09 14:33 | walter1 [未注册用户]
上文有个小错误,
第1点中的预设值,应该是业务中传入的某个字段值。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-07 20:13 编辑过


相关链接: