spring + activiti 实现使用自己的user表和role表来管理流程任务
程序员文章站
2022-04-20 22:21:17
...
企业级activiti应用中,企业都有自己的用户表和权限表之类的,在使用activiti时,一般都不会用到activiti自带的用户表act_id_user和组表act_id_group,其实就是用户和权限差不多,其实实现起来也很简单,重写GroupEntityManager,UserEntityManager中的一下方法就可以了,当然,这些还需要spring扫描注入;下班就直接上代码实现:
(1)创建两个工厂
CustomGroupEntityManagerFactory.java
@Service
public class CustomGroupEntityManagerFactory implements SessionFactory {
private CustomGroupEntityManager customGroupEntityManager;
@Override
public Class<?> getSessionType() {
//注意此处必须为Activiti原生的类,否则自定义类不会生效
return GroupIdentityManager.class;
}
@Override
public Session openSession() {
return customGroupEntityManager;
}
@Autowired
public void setCustomGroupEntityManager(CustomGroupEntityManager customGroupEntityManager) {
this.customGroupEntityManager = customGroupEntityManager;
}
CustomUserEntityManagerFactory.java
@Service
public class CustomUserEntityManagerFactory implements SessionFactory {
private CustomUserEntityManager customUserEntityManager;
@Override
public Class<?> getSessionType() {
//注意此处必须为Activiti原生的类,否则自定义类不会生效
return UserIdentityManager.class;
}
@Override
public Session openSession() {
return customUserEntityManager;
}
@Autowired
public void setCustomUserEntityManager(CustomUserEntityManager customUserEntityManager) {
this.customUserEntityManager = customUserEntityManager;
}
工厂是用来创建user,和group管理对象的,下面是两个管理对象的代码
CustomUserEntityManager.java
@Component
public class CustomUserEntityManager extends UserEntityManager {
@Resource
private BackendUserMapper backendUserMapper;
@Resource
private BackendRoleMapper backendRoleMapper;
@Override
public List<Group> findGroupsByUser(String userId) {
Long id = Long.valueOf(userId);
if (StringUtils.isBlank(userId)) {
return null;
}
List<BackendRole> backendRoles = backendRoleMapper.queryBackendRoleByUserId(id);
List<Group> groups = new ArrayList<Group>();
GroupEntity groupEntity = null;
for (BackendRole backendRole : backendRoles) {
groupEntity = new GroupEntity();
groupEntity.setRevision(1);
groupEntity.setType("assignment");
groupEntity.setName(backendRole.getEnName());
groups.add(groupEntity);
}
return groups;
}
@Override
public User findUserById(String userId) {
BackendUser backendUser = backendUserMapper.selectByPrimaryKey(Long.valueOf(userId));
UserEntity userEntity = new UserEntity();
userEntity.setId(String.valueOf(backendUser.getId()));
return userEntity;
}
CustomGroupEntityManager.java
@Component
public class CustomGroupEntityManager extends GroupEntityManager {
@Resource
private BackendRoleMapper backendRoleMapper;
@Override
public List<Group> findGroupsByUser(String userId) {
Long id = Long.valueOf(userId);
if (StringUtils.isBlank(userId)) {
return null;
}
List<BackendRole> backendRoles = backendRoleMapper.queryBackendRoleByUserId(id);
List<Group> groups = new ArrayList<Group>();
GroupEntity groupEntity = null;
for (BackendRole backendRole : backendRoles) {
groupEntity = new GroupEntity();
groupEntity.setRevision(1);
groupEntity.setType("assignment");
groupEntity.setName(backendRole.getEnName());
groups.add(groupEntity);
}
return groups;
}
spring启动时注入
这只是一个简单的实现方法,处理不是很好,如果你有更好的方法,你也可以写博客分享给我一起学习学习,哈哈,