跳至主要內容

Flowable-5.人员组织架构系列

holic-x...大约 3 分钟框架BPMFlowable

Flowable框架学习笔记-05-人员组织架构系列

Flowable-idm说明

1.flowable-idm数据表说明

表名表说明
ACT_ID_BYTEARRAY二进制数据表(IDM暂时不用)
ACT_ID_GROUP用户组信息表
ACT_ID_INFO用户信息详情表(IDM暂时不用)
ACT_ID_MEMBERSHIP人与组关系表(用户与组关联)
ACT_ID_PRIV权限表(应用程序访问权限表)
ACT_ID_PRIV_MAPPING用户或组权限关系表(用户或组与权限关联表)
ACT_ID_PROPERTY属性表(flowable自身维护的表-版本控制,不允许操作)
ACT_ID_TOKEN系统登录日志表(用户登录信息)
ACT_ID_USER用户表

需要关注的表:

IDM-人与组关联表:ACT_ID_USER、ACT_ID_GROUP、ACT_ID_MEMBERSHIP

IDM-权限关联表:ACT_ID_PRIV、ACT_ID_PRIV_MAPPING

IDM-用户登录表:ACT_ID_TOKEN

IDM-Flowable属性表:ACT_ID_PROPERTY(数据不允许删除或变更,否则导致系统运行异常)

image-20200616000310292

2.API方式操作IDM引擎

身份识别引擎包含的服务有:

IdmIdentityService:提供用户的创建、修改、删除、密码修改、登录、用户头像设置等;提供组Group的创建、删除、用户与组关系的关联、删除关联;提供权限的创建、删除、关联等

IdmManagementService:对身份识别相关的数据库表进行统计、获取表的列信息

IdmEngineConfiguration:提供数据库配置信息

IdmIdentityService

IdentityService

  • 管理用户(User)
  • 管理用户组(Group)
  • 用户与用户组关系(Membership)
方法含义
identityService.newUser("userid")创建一个用户
identityService.newGroup("groupid")创建一个组
identityService.saveUser(user)保存或者更新用户
identityService.saveGroup(group)保存或者更新组
identityService.createUserQuery()查询用户
identityService.createGroupQuery()查询组

此处使用Springboot整合Flowable,借助注解注入服务实现数据操作

(1)添加用户

访问接口:

http://localhost:8090/sbf-demo/idm/addUser

@RequestMapping("addUser")
public void addUser(){
    UserEntityImpl user = new UserEntityImpl();
    user.setId(UUID.randomUUID().toString().replaceAll("-",""));
    user.setFirstName("张");
    user.setLastName("小白");
    user.setEmail("hhh@126.com");
    idmIdentityService.saveUser(user);
}

访问说明:

测试访问报空指针异常,分析出错原因:当执行添加用户方法的时候跳转到execute方法,但这与理想执行的效果有所差异。

image-20200616093822548

分析源码可知,execute方法执行会通过isNewUser方法判断要执行的代码段,判断依据是以指定user实体的revision字段是否为0作为参考,而实际默认的revision是1,因此代码执行到另一条分支。

public boolean isNewUser(User user) {
    return ((UserEntity)user).getRevision() == 0;
}

image-20200616094802029

解决方式:设定版本号为0,指定添加用户操作

    @RequestMapping("addUser")
    public void addUser(UserEntityImpl user){
        // 设定版本号为0,指定添加用户操作
        user.setRevision(0);
        user.setId(UUID.randomUUID().toString().replaceAll("-",""));
        // .... 其余属性配置 ....
        idmIdentityService.saveUser(user);
    }
(2)添加用户组

访问接口:

http://localhost:8090/sbf-demo/idm/addGroup

@RequestMapping("addGroup")
public void addGroup(){
	GroupEntityImpl group = new GroupEntityImpl();
	// 设定版本号为0,指定添加用户操作
	group.setRevision(0);
	group.setId("admin");
	group.setName("管理员组");
	//  group.setType("");
	idmIdentityService.saveGroup(group);
}

访问说明:指定ID必须唯一

(3)绑定用户与用户组关系

访问接口:

@RequestMapping("bindMemberShip")
public void bindMemberShip(){
	String userId = "haha";
	String groupId = "admin";
	idmIdentityService.createMembership(userId,groupId);
}

访问说明:

如果指定的用户或者用户组不存在则抛出异常(数据库外键关联)

image-20200616101521244

(4)创建权限信息

访问接口:

private void createPrivilege(IdmIdentityService idmIdentityService) {
		PrivilegeEntity privilege = (PrivilegeEntity) idmIdentityService.createPrivilege("delete");
	}
(5)绑定用户权限或组权限

访问接口:

private void addUserPrivilegeMapping(String userId, String privilegeId) {
	idmIdentityService.addUserPrivilegeMapping(privilegeId, userId);
}
private void addGroupPrivilegeMapping(String groupId, String privilegeId) {
	idmIdentityService.addGroupPrivilegeMapping(groupId, privilegeId);
}
(6)创建查询

访问接口:

@RequestMapping("createQuery")
public void createQuery(){
	idmIdentityService.createUserQuery().list();
	idmIdentityService.createGroupQuery().list();
	idmIdentityService.createPrivilegeQuery().list();
	idmIdentityService.createTokenQuery().list();
}

IdmManagementService

@RequestMapping("getTableMetaData")
public void getTableMetaData() {
	// 获取指定数据表信息
	TableMetaData table = idmManagementService.getTableMetaData("ACT_ID_USER");
	System.out.println(table.getTableName());
	System.out.println(table.getColumnNames());
	System.out.println(table.getColumnTypes());
}
返回结果:返回指定数据表的相关参数
ACT_ID_USER
[ID_, REV_, FIRST_, LAST_, DISPLAY_NAME_, EMAIL_, PWD_, PICTURE_ID_, TENANT_ID_]
[NVARCHAR2, NUMBER, NVARCHAR2, NVARCHAR2, NVARCHAR2, NVARCHAR2, NVARCHAR2, NVARCHAR2, NVARCHAR2]
@RequestMapping("getProperties")
public void getProperties() {
	Map<String, String> properties = idmManagementService.getProperties();
	Set<Map.Entry<String, String>> entries = properties.entrySet();
	for (Map.Entry<String, String> entry : entries) {
		System.out.println("key:" + entry.getKey());
		System.out.println("value:" + entry.getValue());
	}
}
返回结果:获取flowable相关版本信息
key:schema.version
value:6.5.0.6
@RequestMapping("createTablePageQuery")
public void createTablePageQuery() {
	TablePage tablePage = idmManagementService.createTablePageQuery().tableName("")
		.listPage(0, 10);
    System.out.println("rows:" + tablePage.getRows());
    System.out.println("size:" + tablePage.getSize());
   	System.out.println("tableName:" + tablePage.getTableName());
}
返回结果:

image-20200616105427106

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3