做一个办公系统,几个基本组件是必须的,权限,比如用casbin,还有一个就是流程,这个不好整,特别对于golang语言,既要管服务端还要管前端流程图绘制。
我利用vue.js+element+extends+flow+beego做了一个通用流程,可以在线体验,了解流程的设计与使用。
这个是比较好的流程数据库设计解说,值得看看。
1 设计说明
什么是文档流程?
一个文档流程的本质就是改变文档状态state);对应的,我们再设计一个改变状态的动作action;如果再给文档分类doctype,比如合同流程,采购流程的文档;再配合用户-角色-权限(accesscontex);当一个文档处于一个state的时候,谁有权限permission操作action它?就要预设置好当前状态state下transition:从state1通过动作action1改为state2;那么一个文档如何按照指定的流程来往下走呢,就要先定义一系列节点node,再将这些节点组合到workflow下。
以上都是系统管理员设置的部分,当一个用户使用这个系统的时候,他在某个板块(doctype分类)新建(上传)一个文档document,系统自动根据这个分类,设置了文档的初始state,在这个state下,一般只有一个动作可选,就是传递给下一个状态的操作,还要选接受的人或组(也可以系统固定),还可以写上注释、说明,最后点击按钮提交apply;系统要做的,记录下来谁在什么时间操作了,把信息message发送给对应的用户的信箱mailbox,当对应的用户登录系统的时候,可以查看message。
当用户点击信箱里某个信息,转到对应的文档详情detail上,能看到这个文档以往(历史)操作记录时间线,可以对这个文档进行操作:选择动作action,选择接受的组,提交apply。
2 设置部分
1.1 设置doctype docstate和docaction
1.1.1 文档类型doctype,只是给定一个名字而已,每个doctype对应一个workflow流程,如果文档某些需要签署到总经理,有些则只要签署到部门经理,咋办?
1.1.2 文档状态,即每一级给定一个状态,也只是定一个名字而已;
1.1.3 用户动作,从一个状态到另一个状态对应的动作,只是一个名字而已;
1.2 设置transition node 和workflow
1.2.1 transition转变,就是定义一个状态到另一个状态以及动作;
1.2.2 workflow流程,一种文档类型完整流程,将节点纳入到这个流程中,就完成了一个文档流程的设置;
1.2.3 node节点,给流程定义完整流程中各个节点,包括节点类型:比如是单线过来的还是这个节点有多线过来,有开始节点,和结束节点……;
1.3 设置accesscontex
1.3.1 accesscontex访问环境,就是给某个流程定义一下用户-角色-权限;
1.3.2 user用户,每个用户会自动生成一个单用户组,因为flow都是针对group的;
1.3.3 group用户组;
1.3.3 user_group将用户加入组;
1.3.3 role定义角色;
1.3.3 permission定义角色权限,即action;
1.3.3 group_role将group加入角色;