基于WF设计业务流程平台-权限体系
基于WF设计业务流程平台-权限体系
在业务流程平台中,权限体系是我最看重的,
业务流程平台的权限设计与门户类平台的设计完全不同,业务流程平台的权限设计最忌讳做成太监当政模式(也就是系统管理员最大,管理一且)
现在的一些业务流程平台的权限使用[组],[角色]这种方式,早期我做系统也是用这种方式,对这种方式我不加评价
现在我设计的权限体系严格的按企业组织织构,人事关系,业务关系创建.
另外三权分立思想,扁平管理思想对我的应响很大,我的很多理论都来自这些思想
还有,在业务数据的共享,隔离,透明度上,不同的企业文化有不同的要求
比如东方与西方的上下级关系是:
西方:从属的从属不必然从属
东方:下级的下级一定是下级
其实光是西方也有很多不同,比如德国,美国就有很大区别
即使在中国家,不同行业或不同体制的同一行业都有很大区别,在中国有些单位的员工管理竟然还在实行奴隶制,帮会制
当然,本文的目的不是讨论管理体制的好坏,以上我表述我只是想说,一个业务流程平台如果不能与企业的管理文化相对应,那么这个平台没有存在的意义.
举个例子,比如一个请假流程,在有些单位无论怎样设计都是无法让人满意,因为这些单位的很多岗位很难看到有人在岗,即使在岗也是在玩游戏
再举个例子,比如一个请假流程,在有些单位是不需要的,因为这种单位的员工在被zhua进单位后,只有死了以后才能出来.
所以系统要适应企业文化,所谓企业文化就是管理文化,所谓管理文化就是权限体系(当然企业文化中还有一部分是思想上的奴化/煽情教育,这部分是我们系统边界以外的,就不讨论了)
下面我用一个例子来简单介绍一个权限体系如何与流程结合:
现在的工作流理论有两个主要来源:
一个是WfMC,
一个是Petri网
我对WfMC不加评论,Petri网中没的关于权限的理论,当然这不是Petri网的错,因为Petri网本身就不是为业务流程设计的,只是后来的学者将Petri网的理论用到了业务流程上.
这些年也看了不少工作流的理论资料,并没发现对权限体系有比效深层次的介绍.不过没有也好,可以自已发挥,下面看一个例子:
还是请假:
如果我的需求经理坐飞机去客户哪里,花几千元钱请客户吃饭,再坐飞机回来给我带我这么一张图,我会杀了他…..
我对这张图不满意不是因为这张图流程,活动,状态都不是,而是因为没有权限信息.
我需要这样一张图:
说明:
1.这张图的连线我没画箭头,用什么样的箭头表示什么样的流转方式,我会在后面的文章中会具体说明,
2.有些职能与状态的交差区域的附加信息,我也会在后面的文章中会具体说明
3.这张图没的开始与结束结点,我也会在后面的文章中会具体说明
我还需要在不同的阶段,与该流程有利害关系的涉众都有什么权力,通常这部份信息我会让需求经理在基本路径定版后,做二次需求时提交
根据上面这张图我们可以得到如下信息:
1.[X类请假流程],除了[部门领导]企业中的所有人都可以启动
2.当[X类请假流程]的某个实例启动后,只有该实例[启动人(申请)]所在部门的领导才具有该实例的审批权
3.当[审批]完成后,只有该实例[启动人(申请)]才能查看结果
注意:
上图不能画成这样,这两种画法的语意区别我会在后面的文章中会具体说明
现在我们为上面的业务图建立工作流模型
先看员工身份信息部分
不管数据库中的表结构如何建,我们至少需要得到如下信息
[身份表]
用户编号 | 所在部门 | 所属职能 |
lzm | 甲部门 | 部门领导 |
wxd | 甲部门 | A职能 |
lmm | 甲部门 | A职能 |
wxwinter | 乙部门 | A职能 |
wdd | 乙部门 | 部门领导 |
再看[X类请假流程]启动权限
不管数据库中的表结构如何建,我们至少需要得到如下信息
[启动权限表]
流程模板 | 可启动流程的部门 | 可启动流程的职能 | 权限 |
X类请假流程 | 所有 | 所有 | 允许 |
X类请假流程 | 所有 | 部门领导 | 不允许 |
预定义的规则是:
1.[权限]否定高于肯定
2.其他的组合与扩展会在后面的文章中会具体说明
上表中的两条数据的逻辑运算得到:[X类请假流程],除了[部门领导]企业中的所有人都可以启动
下面是工作流模板设计
最后是业务状态表
不管数据库中的表结构如何建,我们至少需要得到如下信息
[业务状态表]
流程编号 | 结点编号 | 流程办理部门 | 流程办理职能 | 流程办理人 | 状态 |
预定义的规则是:
1.[流程办理人]不为[空]时,该流程属于[流程办理人]
2. [流程办理部门][流程办理职能]为[空],[流程办理部门][与流程办理职能]者不为[空]时,该流程属于[流程办理部门][与流程办理职能]身份的所有人
3.其他的组合与扩展会在后面的文章中会具体说明
最后我描述一下流程运行的状态
我们以[wxd]要请假为例说明:
1.[wxd]登录,跟据[身份表]得到[甲部门][A职能]
2.[wxd]加载可启动的流程列表,以[A职能]得到[X类请假流程]启动权限
3.[wxd]填写[请假单],以[wxd][甲部门][A职能]的身份启动[X类请假流程]
4.[X类请假流程]启动后,[审请休假]得到[wxd][甲部门][A职能],并自动进入[审批]
5.[审批]是一个等待结点,激活后将通过绑定得到[审请休假]的[甲部门],在进入等待前将[甲部门],[部门领导],[等待]写入[业务状态表]
流程编号 | 结点编号 | 流程办理部门 | 流程办理职能 | 流程办理人 | 状态 |
000001 | 1 | 甲部门 | 部门领导 | 等待 |
6.[审批]进入等待
7.[lzm]登录,跟据[身份表]得到[甲部门][部门领导]
8.[lzm]加载任务列表,跟据[业务状态表]得到[000001]流程的[1]结点办理权限
9.[lzm]填写[审批单],提交流程,触发[审批]
10.[审批]被触发,在关闭前,将[完成]写入[业务状态表],并自动进入[通知结果]
流程编号 | 结点编号 | 流程办理部门 | 流程办理职能 | 流程办理人 | 状态 |
000001 | 1 | 甲部门 | 部门领导 | 完成 |
11..[通知结果]是一个等待结点,激活后将通过绑定得到[审请休假]的[wxd],在进入等待前将[wxd],[等待]写入[业务状态表]
流程编号 | 结点编号 | 流程办理部门 | 流程办理职能 | 流程办理人 | 状态 |
000001 | 1 | 甲部门 | 部门领导 | 完成 | |
000001 | 2 | wxd | 等待 |
12.[通知结果]进入等待
13.[wxd]登录,跟据[身份表]得到[甲部门][A职能]
14.[wxd]加载任务列表,跟据[业务状态表]得到[000001]流程的[2]结点办理权限
15.[wxd]提交流程,触发[通知结果]
16.[通知结果]被触发,在关闭前,将[完成]写入[业务状态表]
流程编号 | 结点编号 | 流程办理部门 | 流程办理职能 | 流程办理人 | 状态 |
000001 | 1 | 甲部门 | 部门领导 | 完成 | |
000001 | 2 | wxd | 完成 |
总结
本文只是权限体系的一篇概念性文章,并没涉及到
- 任务接件,
- 任务分配,
- 任务授权,
- 任务取回,
- 任务退回,
- 子部门,
- 临时项目组,
- 一人多部门,
- 一人多职能,
- 流程的制定权,
- 流程的办理权,
- 流程的监督权,
- 流程的知情权
等基本权限模型,这些内容我会在后面的文章中具体描述.