Flowable-5.人员组织架构系列
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(数据不允许删除或变更,否则导致系统运行异常)
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
方法,但这与理想执行的效果有所差异。
分析源码可知,execute
方法执行会通过isNewUser方法判断要执行的代码段,判断依据是以指定user实体的revision字段是否为0作为参考,而实际默认的revision是1,因此代码执行到另一条分支。
public boolean isNewUser(User user) {
return ((UserEntity)user).getRevision() == 0;
}
解决方式:设定版本号为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);
}
访问说明:
如果指定的用户或者用户组不存在则抛出异常(数据库外键关联)
(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());
}
返回结果: