一步一步学习开发BPM工作流系统--------(五)用户、组织机构和权限管理
该篇介绍工作流配置工具的组织机构和权限管理,这两部分是流程系统必不可缺少的,流程引擎在很多情况下都要依靠组织机构和权限中的角色。例如,任务提交给财务部处理,任务提交给总经理审批,任务提交给管理员审核等。再有稍微复杂一点的,任务提交给流程启动者的所在部门的主管领导。这些都需要组织机构的支持,在企业中还可能存在一人多岗的情况,还可能存在同岗不同级的情况,总之组织机构是比较复杂的,必须能够如实的反应公司或者企业的现状。我们在做BPM的时候必须充分的考虑到各种情况,然后进行抽象和归纳,尽量做到通用,最起码能满足99%的用户需求。
组织机构解决方案
组织机构是体现公司或单位上下级关系的,包括部门、岗位和员工,部门又可以细分为分公司或者地区等,每个部门下设岗位,一个部门可以有多个岗位,部门下包含员工,岗位下包含员工,一个人可以属于多个部门和多个岗位,一个岗位只能属于一个部门。它们之间的关系如下图:
组织机构管理界面如下图:
部门管理的界面如下图:
岗位管理的界面如下图:
岗位级别是指该岗位在整个公司岗位划分中的级别,岗位属性是指该岗位在当前部门中是否是管理岗,一般分主管领导、副主管领导和普通岗位,管理岗位在流程流转中比较有用,依此来确定部门的领导。
岗位级别的管理界面如下图:
岗位级别是公司整体岗位划分,它不依赖于任何部门,体现公司的级别,在部门岗位设定的时候岗位名称可以重复,级别可以不相同,即同岗不同级,比如都是副经理,一个可能是副总级别,一个可能是主管级别。
注意:由于岗位属于部门,在设定岗位人员的时候 同时要把该人员添加到部门下面,否则组织机构根据部门查找的时候找不到该人。
我们把组织机构做成标准的模块HF.Architecture.UI,可以挂接到C/S的应用平台下面。如下图:
我们知道权限是应用系统不可缺少的部分,每个系统都有自己的权限管理,有的系统权限设计的比较细,有的设计的比较“粗糙”。每个系统对权限的要求也不同,目前市场上的软件权限设计的五花八门,但没有一个统一的标准,也没发现几个拿来就可以用的。既然应用软件都需要权限,我们把权限系统做成一个公用的模块,任何系统调用它,我们先来定义一下权限系统的范畴,权限系统可以分为操作权限和内容权限,为什么这么分呢?我认为操作权限是对用户用键盘或者鼠标操作界面上的按钮、菜单等所做的限制,它可以使用同一的规则来进行设计,不管是什么业务,都可以使用一个判断规则;而内容权限是业务产生的数据的权限,包括查看,编辑、创建,这个范围比较大,需求不一,说白了,它是对数据处理的一种权限,是与业务密切相关的,有的业务需要控制到行和列是否显示,有点业务则不需要这么细,所以很难用一个统一的规则来约束,我觉得内容的权限应该属于业务开发领域的范畴,我们这里讨论的权限是操作权限,内容权限太复杂这里暂时不讨论。
权限解决方案
权限管理以人、组和操作为管理要素,人即系统登录用户,所有的人分组管理,对组划分配操作权限。操作细化到每一个界面元素(一个具体操作,如按钮、菜单),每个操作对应一个唯一的权限码(细化到界面元素的好处是可以应对任何权限需求,没有比这个要求更苛刻的了)。在用户点按钮或者菜单的时候进行权限判断。建立组的概念是为了方便管理,一个人可隶属于多个组,对组赋予某一操作权限后,该组下的所有人都会有该权限,一组为单位分配权限,是不是很方便?人、组和操作之间的关系如下图:
设计步骤:
根据上面的权限方案,在对系统进行权限设计的时候,遵循以下步骤:
第一步:为系统划分模块、功能和操作,这个过程一般在系统设计阶段已经完成,但是权限设计与具体业务无关,即使在系统设计的时候划分好了功能模块,也可以在权限系统中重新划分。划分模块、功能和操作的目的是为了对操作码分类管理。具体管理的方式是模块码-〉功能码-〉操作码,三种编码采用如下编码方式:
第二步:对操作用户分组管理,组也可以理解为角色,一个组代表具有一类操作权限的集合,系统中可以有很多组,对租的划分遵循同等权限级别的为一组,尽量避免重叠划分,划分的规则一般与使用系统的客户所属部门有关,例如,可以建立如下组:销售部,采购部,办公室,经理等。划分好组后,向组中添加组员(即具体的操作人员),一个组员可以隶属于多个组。
第三步:为组分配权限,建立组与操作码之间的关系,一个组可以有任意多个操作码,一个操作码可以分配给多个组,一旦为组分配了权限,组中的成员也就具有了该权限。
4.界面操作
下面介绍一下权限系统的具体操作。
主界面
第一步:为系统划分模块、功能和操作
模块的管理界面如下图:
功能的管理界面如下图:
操作的管理界面如下图:
第二步:对操作用户分组管理
用户和组的操作界面
图表 6本地用户和组
用户管理的操作界面
用户隶属组
组的管理界面如下图:
组的成员管理
添加成员如下图:
第三步:为组分配权限
说明:权限模块生成的动态库名为HF.Permission.dll(UI类)和HF.Permission.Data.dll(业务类),界面管理挂接到C/S的应用平台上,如下图:
判断是否具有权限的方法:
private void btnDeletecmd_Click(object sender, EventArgs e)
{
if (PowerData.IsPower("leg", "000000"))//leg是当前登录用户的id,000000是当前按钮的操作码
{
WorkDialog.WarningDlg("权限验证通过!", "提示");
}
else
{
WorkDialog.WarningDlg("没有权限!", "提示");
}
}
组织机构和权限管理是流程系统不可缺少的,但是比较简单,下一节我们介绍流程设计器,这是BPM的难点也是核心。