南大先腾工作流引擎(四)权限与任务分配

概述

南大先腾工作流引擎在任务分配方面有一套完整权限体系。它利用系统的组织机构、流程的组织机构、系统的角色权限、流程变量来对系统中的用户进行定位,从而实现灵活的任务分配工作。

系统组织架构

系统的组织价格是树状的,用户和机构是多对多的关系,用户和机构关联有两个属性,岗位和(行政)级别。比如:员工A在部门A,技术岗的组长;他的岗位就是 技术刚,级别是组长。这个岗位和级别分别对应权限体系中的两个角色类别:岗位角色和行政角色。

角色类别

行政角色

行政角色一般要和所属机构共同决定一个流程业务节点的任务分配。使用行政角色的节点一般只能由一个人执行。比如:请假审批流程需要申请人所在部门的部门经理审批。
行政角色有一个特别的地方,就是这个角色可以委托(授权)给其他人代为执行这个权力。这个功能避免过去领导把自己的用户名和密码给下属代为执行软件。并且在系统中有痕迹记录这个授权过程。和这个过程中被授予者行使这个权力的记录。

行政角色也有一个特殊的属性就是它有一个数值的级别,数值越小等级越高。

岗位角色

岗位角色和行政角色类似,也需要和机构一起指定方能够定位到任务指派的人。它和行政角色有两个主要不同的地方:

  • 岗位不能委托(授权)给其他人。
  • 岗位角色和行政角色不一样,一般也不是只有一个人能做,最典型的岗位角色就是:收银员、内勤。相关的事情拥有这个岗位的人谁都可以做,所以,对应岗位角色的业务的任务是动态的,会对应到多个人,并且只要有一个人做了就可以。

办件(项目)角色

这个角色是指和当前流程业务相关的角色,比如:申请人(业务发起人)、(业务)责任人;这个角色只在这个流程中生效。
办件角色也非常类似于项目角色,一般可以任务一个项目是一个比较大块的事情,一个项目中可以包括多个业务流程。而这些业务流程可能会公用项目角色,比如:项目中所有产生的费用报销需要项目经理审批,这样就要求每个业务流程都有项目经理这个办件角色。为了灵活的处理这类事务,工作流中设计了一个流程组的概念,这个流程组也有办件角色这个概念,可以给属于这个流程组的流程实例公用。在项目管理业务中,这个流程组就和项目对应。
办件角色的使用有一个特殊性,因为办件角色是和特定的业务关联的,不是系统通用的,所以必须在使用这个角色之前的步骤中指定这个角色。比如:需要业务的负责人审批的,不许在申批前面有一个节点中指定这个角色。

流程角色(新增)

新版本的新增了一个流程角色,这个角色和业务系统中的权限角色关联,其目的仅仅是为了简化系统配置,沿袭用户使用传统业务系统的习惯。他起作用的方式和行政角色类似,因为获得政府(事业单位)只有这一类角色(没有岗位角色),他们系统在角色定义中定义角色(对应先腾研发框架的功能角色),而不是在组织机构中给用户指定岗位和行政级别。

权限表达式

流程节点的任务分配有时非常复杂,无法仅仅用上面的角色体系就能明确的指定。比如:由分管领导的有分管领导审核没有分管领导的由当前部门的部门经理审核。像这样有次序选择的就无法用上面的角色体系指定。为了对应这样的应用场景,先腾设计了一套权限引擎来解决。

权限表达式主要由四个计算因子组成:

机构运算

系统中的组织机构是树状有层次的,机构的运算就是以机构变量为坐标进行层次的增(下级机构)减(上级机构)。比如:当前用户机构变量“u"的上级机构就是u-1,它的兄弟单位就是u-1+1(包括自己)。

角色过滤

角色过滤是在机构的基础上,根据岗位和行政级别进行过滤。它是通过角色名称(代码)进行匹配的。

等级计算

有时角色名称过滤不能满足要求,比如要表示申请人的直接领导,不同的申请人的直接领导的行政角色是不一样的。这是就需要等级运行。比如:当前用户的机构变量是“u”的等级是“r”,D(u)R(r-1)就是表示用户的直接领导。

优先选择函数

优先选择函数就是,一组有序的权限表达式,选择第一个结果不为空的结果。目的就是解决一开始提出的那个例子中的场景。

附件

机构表达式形式如下:

常量:empty (空)| all (所有)| “机构代码”;empty和all其实意义上是一样的,因为在节点机构中只能填写一个机构代码,如果空就表示所有,在权限表达式中如果要表示所有就要用all
变量:U(当前操作用户所在机构)| P(上个节点机构)| F (流程所在机构)|N(节点所属机构)| L 相同节点上一个实例所在机构(Last Same Node Instance UnitCode)
数值:层次
操作符:+ (下层机构,层次由后面的数值决定)| - (上层机构)| * (最上层机构的下层机构 ,± 的层次是相对当前的机构来计算的,* 的层次是相对当前机构的最上层机构来计算的)
简单表达式:变量|常量 | 常量 + 数值| 变量 *|+|- 数值 | 变量 - 数值 + 数值
机构表达式: 简单表达式 | (机构表达式) | 机构表达式 || 机构表达式 | 机构表达式 && 机构表达式 | 机构表达式 ! 机构表达式 | S(机构表达式[,机构表达式]+)

机构表达式的结构是一个机构集合,||、&&、!均为集合运算符,||是取两个集合的并集,&&取两个集合的交集,!是在前一个集合中减去后一个集合。

  • S(机构表达式[,机构表达式]+) ,这个表达式表示返回多个表达式中的 第一个结果不为空的集合

权限引擎的语法图

权限表达式组成主要由 机构、人员、岗位角色、行政角色或者行政角色等级来决定。

机构表达式:参见上节 人员表达式:(“人员代码”| 变量,变量可以 C 业务的创建人比如申请人 O 当前操作人员即提交节点的人员 )[,“人员代码”| 变量]*
岗位角色:岗位角色代码[,岗位角色代码] *
行政角色:行政角色代码[,行政角色代码] *
行政角色等级 :R(等级常量)| R(变量,变量可以 C 业务的创建人比如申请人等级 O 当前操作人员即提交节点的人员等级)| R(变量+|-等级)
等级计算,+1,比表示当前等级低一等的最高级,比如,当前等级为3 ,+1范围4,如果没有4 只有5则返回5,-也一样
权限简单表达式:[D/P(机构表达式,[机构表达式,]*)][gw(岗位角色)][xz(行政角色)|R(行政角色等级)] | U(人员表达式)
权限表达式 :权限简单表达式 | S(权限表达式[,权限表达式]+) | (权限表达式) | 权限表达式 ||权限表达式 | 权限表达式 && 权限表达式 | 权限表达式 ! 权限表达式

权限表达式的结构是一个人员集合,||、&&、!均为集合运算符,||是取两个集合的并集,&&取两个集合的交集,!是在前一个集合中减去后一个集合。

  • S(权限表达式[,权限表达式]+) ,这个表达式表示返回多个表达式中的 第一个结果不为空的集合。 权限引擎中的机构表达式中有一个特有的变量N,N代表节点的所属机构及引用节点机构引擎的结果。

D/P:D和P对应的都是机构表达式,不同的是D是选择所有的用户P只选择主机构用户,所以一个【权限简单表达式】中只能有一个D或者P,不能同时存在。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值