Activiti权限同步问题

这个问题也是比较多的人询问过,Activiti支持对任务分配到:指定人、指定组、两者组合,
而这些人和组的信息都保存在ACT_ID..表中,有自己的用户和组(角色)管理让很多人不知所措了,
原因是因为每个系统都会存在一个权限管理模块(维护:用户、部门、角色、授权),不知道该怎么和Activiti同步。
2.4.1 建议处理方式

Activiti有一个IdentityService接口,通过这个接口可以操控Activiti的ACT_ID_*表的数据,一般的做法是用业务系统的权限管理模块维护用户数据,
当进行CRUD操作的时候在原有业务逻辑后面添加同步到Activiti的代码;例如添加一个用户时同步Activiti User的代码片段:




/**
* 保存用户信息 并且同步用户信息到activiti的https://www.360docs.net/doc/2a16597712.html,er,同时设置角色
* @param user
* @param roleIds
*/
public void saveUser(User user, List roleIds, boolean synToActiviti) {
accountManager.saveEntity(user);
String userId = user.getId().toString();

if (synToActiviti) {
List activitiUsers = identityService.createUserQuery().userId(userId).list();
if (activitiUsers.size() == 1) {
//更新信息
https://www.360docs.net/doc/2a16597712.html,er activitiUser = activitiUsers.get(0);
activitiUser.setFirstName(user.getName());
activitiUser.setLastName("");
activitiUser.setPassword(user.getPassword());
activitiUser.setEmail(user.getEmail());
identityService.saveUser(activitiUser);

// 删除用户的membership
List activitiGroups = identityService.createGroupQuery().groupMember(userId).list();
for (Group group : activitiGroups) {
identityService.deleteMembership(userId, group.getId());
}

// 添加membership
for (Long roleId : roleIds) {
Role role = roleManager.getEntity(roleId);
identityService.createMembership(userId, role.getEnName());
}

} else {
https://www.360docs.net/doc/2a16597712.html,er newUser = identityService.newUser(userId);
newUser.setFirstName(user.getName());
newUser.setLastName("");
newUser.setPassword(user.getPassword());
newUser.setEmail(user.getEmail());
identityService.saveUser(newUser);

// 添加membership
for (Long roleId : roleIds) {
Role role = roleManager.getEntity(roleId);
identityService.createMembership(userId, role.getEnName());
}
}
}

}

相关文档
最新文档