`
ww2
  • 浏览: 401082 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

论工作流——没有权限的概念

阅读更多

  工作流,在其存在的价值上主要是应对各种任务之间的信息传递,尤其是流程的各种启动、完成等信息。考虑到这一个问题上,一个很显而易见的是工作流没有权限的概念,所谓的权限,只是在业务处理上出现的信息控制而已。

  看到各位网友徘徊于研究工作流组织和权限问题,感到不得不说,希望让一些刚对工作流入门的同行少走弯路。国内懂得这个的朋友都闭帚自珍,不太愿意开班授徒,学术风气之闭塞,实在令人感叹。那也只好让我这个水平不怎么样的,来一个抛砖引玉。

1. 纵横交错

  国内所谓的工作流权限模型,一般是参考 RBAC,或者是树状的组织结构与角色的结合。

  所谓的 RBAC,这个标准注意其设计的初衷是 security administration。注意这些权限标准,一般后面都带有这个 AC(Access Control),这种描述说明其设计的理念所在。这种模型一般用在网络操作系统上面,看到网上一些文章,把这种模型引入到工作流系统中,大概也是受了操作系统的影响。

  还有就是一些文章,则采用了直接影射现实中的组织结构。这就形成了一种说法组织模型和权限结合的说法。但是这种组织结构呈现树状,那如果是横向的结构怎么办?一般就按照直观的概念,引入了"岗位"或者"角色"的概念。对于这种做法我不想多说,系统设计的个中高手,很快就能对这种结构下一个结论:抄袭需求,没有分析,直接实现。

2. 为何没有权限?

  工作流,是一个主动发送的概念。就是一个工作任务,系统需要寻找到一个人,通知他去响应工作,是一个主动的概念。而基于角色或者组织结构的,一般是一种被动的概念,就是某人能够做一件事情,而另外一些人又不能做。

  这样就有一个十分显然的差别:工作流中,是某人一定要做这件事情,而且这个人在工作的过程中系统不会再将这个工作分发给其他人,其他人也不可能在系统没有分配的情况下"抢"(这个"抢",实际上就是 RBAC 中的 Access 的概念)到正在工作的任务。因此工作流没有权限问题,只有分发任务的目标问题。

3. 分发任务的一种设计

  现在很显然,一切权限的问题,只是一个分发任务的问题。而分发任务只是一个瞬间动作,所以分发的目标,这一部分是可以很简单的完全独立于工作流引擎本身(如果在用 jbpm 或者 osworkflow 的,也应该能体会到这种设计)。这一点上和权限系统完全不同,权限必须渗透到系统的每一个可能的细节,很难完全独立出来。

  那么分发任务,应该怎么找到目标呢?我们实践的答案是网状结构。这个网状结构的设计数学上可以表示为集合。如部门 Department 1 是一个可作为分发的目标,而分发需要通过这个 Department 1 找到其下属人员,那么我们可以说下属人员和这个 Department 1 有关联,记作 Department 1 = { 张三,李四,王五 }。有可能工作流分发中可能要找 Department 1 的主任,那怎么办?可以记作 Manager = { 张三,陈六,丁一 },这样就有了集合 Department 1 ∩ Manager = { 张三 },就找到了目标。

  如果上下级的关系那怎么找呢?可以记作:销售部 = { 电话销售部,营业网点,网络直销部 },实际上,如果在配置这些集合的时候,强制约定了每个部门只能重属于一个部门(数学上说法,就是任意两个部门的交集为空集),那么就是所谓的树型组织结构了。寻找上级部门,实际上就是寻找其所属的集合,而寻找下级部门,实际上就是寻找集合中的一个元素。

  如果工作流的定义中,不存在一个关系的引用,那么就不需要建立集合。譬如说,网络直销部虽然和销售部的是上下级部门的关系,但是如果实际业务流程中,网络直销部不需要向上汇报的流程,销售部也没有下达命令的流程,那么分发目标的集合中,不需要反映两者之间的关系。

  如果抛开实际的语言意义,在形而上的角度去观察,可以看出组织结构上的部门、执行操作的角色、工作任务上的岗位,实际上都是集合。在没有形而上的抽象分析,那么当这些不同的集合交集不为空集的时候,就会引出许多复杂的而且容易产生冲突的细节,在具体直观模型这个的这个层次上还要仔细推敲才能正确使用(通常是各种条件判断的代码充斥着开发人员的屏幕)。所以我们看到了一些实用这种方式描述系统的复杂性(就是纵向用树状表示组织结构,横向用角色表示 Access 权力的结构)。可以看出这种设计只能算是软件分析断层的产物而已(究竟是人才断层,还是意识断层,还是成本导致断层?这个又是一个值得反思的问题)。

  至于集合方式的代码实现,就比较简单,我这里不再铺展。

4. 总结

  可以看到,基于集合的表示,把工作流目标的分发高度抽象,能用最简单的概念解决几乎所有分发需求。软件的分析设计作用,就在这里显出了其威力。我们做技术出身的,需要注意不要被编码蒙蔽了眼睛:直观模型,只能应付特定需求;只有经过分析抽象的逻辑或者数学模型,才能使我们的代码拥有10年甚至更强的生命力。

分享到:
评论

相关推荐

    ACL在网络安全的应用仿真-网络安全论文-计算机论文.docx

    ——文章均为WORD文档,下载后可直接编辑使用亦可打印—— 摘要:ACL作为热门的网络技术之一,被广泛应用于网络管理领域中。文章结合企业对网络的常用访问控制需求,并利用思科PacketTracer仿真,模拟了ACL在网络...

    asp.net知识库

    Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制,自己的网站使劲弹新IE窗口 对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的...

    Java开发技术大全 电子版

    3.7.4再论静态成员变量137 3.8main()方法和命令行参数139 3.9结束方法141 3.10本地方法141 3.11本章小结144 第4章继承与多态145 4.1继承的基本原理145 4.2子类对父类的继承146 4.3属性隐藏和方法的覆盖148 ...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    5.3.2 使用xaml声明工作流 264 5.4 小结 265 第6章 异常处理和调试 267 6.1 visual studio 2010 team system的新增内容:历史调试 267 6.2 与visual basic 6兼容的注意事项 268 6.3 .net中的异常处理 268 ...

    LINUX操作系统(电子教案,参考答案)

    3.4.2 权限字与权限操作 46 3.5 设备文件 48 3.6 磁盘的操作 51 3.7 备份 60 小结 62 习题三 62 一、思考题 62 二、选择题 63 三、上机操作 64 第4章 文本编辑 65 4.1 行编辑器ed 65 4.1.1 启动ed 65 4.1.2 输入和...

    数据库-餐饮管理系统.doc

    6 四、需求分析结果 7 4.1 数据流图 7 4.2 数据字典 10 五、数据库概念结构设计 12 5.1 分E-R图 12 5.2 总E-R图 14 5.3 基本表 15 一、系统开发平台 题目:酒店管理信息系统 数据库: SQL SEVER 2008 R2 操作系统等:...

    教学管理信息系统—教师数据库设计.doc

    因为时间不足,而且第一次接触 Borland Delphi 7和Mircosoft SQL Server 2000这两个开发工具,所以并没有设立权限,也没有建立索引和视图等来优化系统功能 。只是实现了对信息的基本处理功能。 1 1.4.数据库系统的...

    ABP(2.02)框架相关Demo代码以及报错处理和中文说明手册

    它并没有使用任何新的技术,只是由两名架构师将asp.net开发中常用的一些工具整合到了一起,并且部分实现了DDD的概念。是一个开箱即用的框架,可以作为asp.net分布式应用的一个良好起点。 它的功能包括: 服务器端...

    高级软件架构师复习提纲

    53、 授权包括://用户的权限//代码的执行权限 54、 在构思阶段,各种角色的职责是://根据质量目标提供反馈//提出为了保证质量而需要采取的行动 55、 移动数据拷贝需考虑的因素有哪些?//数据的有效性不再符合要求...

    windowsnt 技术内幕

    共享和NTFS权限的组合 取得NTFS对象的所有权 理解NTFS权限 进一步理解删除权限 进一步理解“禁止访问”权限 进一步理解“列表”权限 进一步理解“读”、“添加”、“添加和读”权限 进一步理解“修改”和“完全控制...

    计算机网络课程设计报告-校园网网络构建方案设计和实现.doc

    现准备通 过科教网接入因特网,但从科教网只申请到4个C类网络(222.191.1.0——222.191.4.0) ,为了安全,要求每个分校区的学生公寓子网和教师子网不在同一广播域。同时,学校 有若干台应用服务器,同时对内和对外...

    Android高级编程--源代码

     由于Android构建在开源代码的框架之上,而且提供了强大的SDK库和开放的理念,所以它为广大的没有任何移动应用程序开发经验的新手开辟了一条开发完美的移动应用程序的康庄大道。而富有经验的移动开发人员现在也可以...

Global site tag (gtag.js) - Google Analytics