欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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启动时注入
spring + activiti 实现使用自己的user表和role表来管理流程任务

这只是一个简单的实现方法,处理不是很好,如果你有更好的方法,你也可以写博客分享给我一起学习学习,哈哈,