Flowable引擎使用统一权限管理
来源:互联网 发布:mac 远程桌面 linux 编辑:程序博客网 时间:2024/06/05 19:42
工作流引擎Flowable是从Activiti引擎Fork出来的一个版本,它更加友好,且与Activiti完全兼容,值得推荐(事实上是因为访问flowable.org比访问activiti.org要快一些)。本文讨论的方案均可用于Activiti引擎。
因为Flowable有自己的一套用户权限体系,但是我们的业务系统都会提供更完善的用户权限,所以,整合这两套用户就是一个我们在实践中必须要解决的问题。官方提供的方案无外乎三个:一是同步用户数据;二是扩展代码,实现自己的UserEntityManager等;三是用视图取代原来的几个表。很显然,方案三是最简单的,完全不需要写代码。
本文讨论的就是方案三。Flowable提供的权限体系比较简单:用户User-组Group,但我们的业务系统却是:用户User-部门Group-角色Role。比如,我们会有『组织部秘书』或『组织部部长』这样的区分,而原来的Flowable则只有简单的『管理员』或『用户』,我们需要做的事情就是如何将『部门-角色』映射到『Group』。
下面我们就切入正题,说说如何具体实现用户视图取代表来解决两个系统的统一用户认证。
首先,我们先将Flowable中的三张表改名:
我们有这样的几张业务表需要映射到Flowable中,下面分述之。
用户表(t_user)
有一个密码字段,因为我们的业务表中加密保存而在Flowable中却是明文,所以,需要特殊处理,所以这里不需要考虑,直接用000000来做密码。我们将它映射到Flowable中的用户表,可以创建一个视图,命名为ACT_ID_USER,语句下所示(为方便起见仅给出select子句)。
select t1.login_name as ID_,t1.login_type as REV_,t1.real_name as FIRST_,concat('',t1.id) as LAST_,t1.email as EMAIL_,'000000' as PWD_,t1.avatar_url as PICTURE_ID_from oa_system.t_user t1union select ID_,REV_,FIRST_,LAST_,EMAIL_,PWD_,PICTURE_ID_ from XXXX_ACT_ID_USER
这里我们将前面改名为xxx_act_id_user的表也通过union包进来,可以包含原来的那些DEMO用户,如果不需要,可以省略这个union。
部门表(t_group)
这里的group_master_id用于记录该部门的分管校领导,是除部门领导之外的另一个会影响到用户权限的字段。
角色表(t_role)
然后,我们需要将这两张表进行合并,以映射到Flowable的Group中,所以可以这样做:
select concat(t1.id,':',t2.role_code) as ID_, 1 as REV_, concat(t1.group_name,':',t2.role_name) as NAME_,case when t1.id=1 and t2.role_code='system' then 'security-role' else 'assignment' end as TYPE_from oa_system.t_group t1,oa_system.t_role t2 unionselect ID_,REV_,NAME_,TYPE_ from XXXX_ACT_ID_GROUP
我们用冒号作为组ID与角色的分隔符,比如 4:security 表示ID为4的部门的秘书角色,并且将它作为Flowable中的Group的ID,同时,需要考虑我们业务表中有一个角色叫system,是系统管理员,所以将它也作为Flowable中的管理员。
如此一来,我们会得到一张大表(视图),N个部门*M个角色的记录数。
关系表(t_group_role_user)
很明显,我们的用户是可以在不同部门扮演不同的角色。同样,我们也将它映射到Flowable中去。
select t3.login_name as USER_ID_, concat(t1.group_id,':',t2.role_code) as GROUP_ID_ from oa_system.t_group_role_user t1 left join oa_system.t_role t2 on t1.role_id=t2.id left join oa_system.t_user t3 on t3.id=t1.user_idunionselect t2.login_name as USER_ID_,concat(t1.id,':president') as GROUP_ID_ from oa_system.t_group t1 left join oa_system.t_user t2 on t1.group_master_id=t2.id where t1.group_master_id is not null unionselect USER_ID_,GROUP_ID_ from XXXX_ACT_ID_MEMBERSHIP
这里我们union了三个查询子句,其中第二个就是用来处理部门的分管校领导这个概念。因为部门正常的领导是manager,所以,如果用户被分配到该部门的president,就是将他作为分管领导配置的。
至此,我们用视图实现了三张表USER,GROUP,MEMBERSHIP,现在可以使用业务系统中的用户正常访问Flowable了。
比如,我们可以这样动态配置candidateGroups=”12:security”。
- Flowable引擎使用统一权限管理
- flowable使用
- flowable-task使用
- 统一用户及权限管理系统
- Flowable
- 使用Spring进行统一日志管理 + 统一异常管理
- 使用Spring进行统一日志管理 + 统一异常管理
- 使用Spring进行统一日志管理 + 统一异常管理
- 使用Spring进行统一日志管理 + 统一异常管理
- flowable 五个引擎和组成引擎的服务
- springMVC+shiro的权限管理和异常统一处理
- shiro实现APP、web统一登录认证和权限管理
- shiro实现APP、web统一登录认证和权限管理
- shiro实现app web统一登陆认证和权限管理
- Android 使用 Gradle 统一配置依赖管理
- 使用Gradle进行统一依赖管理
- 工作流引擎 Flowable 6.0.0.RC1 release,完全兼容Activi
- MVP+Retrofit+RxJava(Flowable)结合使用
- strace
- MFC——常见的几种类型转换(CString、Int、Char、string)
- ARM Tustzone 之一
- RadioGroup中RadioButton默认选中问题
- blockUI1.33参数
- Flowable引擎使用统一权限管理
- python:virtualenv、virtualenvwrapper
- 动态规划-图像压缩问题
- Hadoop+eclipse开发环境
- react-native 之 ref 的使用
- JavaSE实战——面向对象(中) 抽象类,接口,多态,内部类,匿名内部类
- IOS 点击事件失效
- 大功率IGBT驱动技术的现状与发展
- java的使用proguard maven进行代码混淆