初涉基于工作流平台的访问控制
沙晋 深圳易思博
访问控制技术的运用已经渗透到当代社会中的各行各业,不少的国际高科技公司已经在自己的产品中将访问控制技术实现得相关完善,如企业级关系数据库供应商Oracle和IBM公司所开发的数据库产品中,都有自己的访问控制技术的实现。
以IBM的DB2产品为例,其中有权限和特权两个概念:权限是由特权组和较高级别的数据库管理器(实例级别)维护和实用操作组成;而特权则是针对数据库以及其中的对象操作实施控制的。同时,DB2还定义了五种权限,其中SYSADM、SYSCTRL 和 SYSMAINT 是系统实例级权限,而DBADM 和 LOAD 权限是为了某个特定的数据库而指定给某个用户或组的。对于数据库级特权和对象级特权,前者的作用范围覆盖数据库内的所有对象,而后者仅与特定对象有关。这种权限与特权的分配,使数据库的管理者和使用者都能根据DB2中所设定及配置的访问控制策略进行许可的资源操作,可以作为访问控制技术实现中的基本标准。
以这些基本标准为基础,我们不难为自己开发的应用系统提供一个访问控制模块,下面我们就以一个工作流系统为例,为其提供访问控制技术的相关实现。在实际的应用中,工作流系统通常都是以一种需要进行二次开发的通用平台提供给商业用户的,这也就决定了工作流系统中所需要的权限控制与普通数据库的权限控制实现略有不同。除了工作流系统级别的权限与操作外,还需要可容纳二次开发用户的业务级权限与操作。
根据以上的要求,我们可以给出以下的组成元素:人员,组织,角色,系统级操作及业务级操作,关系类图如下,为了保持简洁,本类图结构并未进行优化。
图1:访问控制模块基本关系类图
对于系统级操作而言,主要针对整个工作流系统的运作进行管理,初期我们可以假定在系统初始阶段指定一个管理者,拥有所有的系统级操作,这些操作都被赋予给一个称为ADMIN的角色,操作列表如下:
操作代码 | 操作名称 | 操作描述 |
0001 | CREATE_WF_MODEL | 创建工作流程模板 |
0002 | UPDATE_WF_MODEL | 更新工作流程模板 |
0003 | DELETE_WF_MODEL | 删除工作流程模板 |
0004 | LOAD_WF_MODEL | 装载工作流程模板 |
0005 | UNLOAD_WF_MODEL | 卸载工作流程模板 |
0006 | START_WF | 启动工作流程 |
0007 | STOP_WF | 终止工作流程(无条件完全终止) |
0008 | SUSPEND_WF | 挂起工作流程 |
0009 | RESUME_WF | 恢复工作流程 |
0010 | GRANT_SYS_OPER | 赋予角色系统级操作能力 |
0011 | REVOKE_SYS_OPER | 去除角色系统级操作能力 |
0012 | GRANT_BUSS_OPER | 赋予角色业务级操作能力 |
0013 | REVOKE_BUSS_OPER | 去除角色业务级操作能力 |
上表中所列出的只是一个系统级操作中所必须的子集,新增,删除,修改用户,工作组以及角色的操作定义并未被列入,且不同的工作流系统开发者可以定义其他不同的系统级操作。我们规定以0开头的操作代码代表了系统级操作,这些信息可以存在于系统数据库表中或其他持久性存储介质上。
在这里,我们设定一个简单的二次开发业务环境:处理客户投拆流程。以下是一个简化的处理流程:
图2:处理客户投拆流程
根据上图所给出的业务流程,我们可以制定两个或三个角色,以两个角色为例:雇员和经理。但在这个业务应用中存在三个业务级操作,分别分配给对应的角色,再指定给系统中所定义的用户,具体定义如下表:
操作代码 | 操作名称 | 操作描述 | 所属角色 |
1001 | COMPLAIN_HANDLE | 对客户投拆进行处理 | 雇员,经理 |
1002 | COMPLAIN_CONFIRM | 对客户投拆处理进行确认 | 经理 |
1003 | COMPLAIN_FILE | 将客户投拆及处理信息归档 | 雇员,经理 |
在指定了这些操作以后,工作流系统将保存这部分信息到系统数据库表中,系统管理者将在对工作流程进行建模时为流程中的每一个任务指定一个执行者角色,登录者所被分配的角色将被工作流引擎用来决定该用户是否能够对该任务进行处理。
至此,我们基本上完成了一个关于通用工作流系统的访问控制设计,并假设了一个平台上二次开发的业务用例。实现该初步设计的具体方案可以有很多,并能进行相应的优化。毕竟在这个简洁的示例中,还有太多细节没有描述,欢迎大家多提意见进行讨论,如果需要转载,请注明出处,谢谢!