Aciviti流程权限管理实战

一 代码

package com.syc.activiti;


import java.util.List;


import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.task.IdentityLink;


/**
* 查询流程定义的权限数据
*
*/
public class CandidateQuery {


    public static void main( String[] args ) {
        // 创建流程引擎
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 得到流程存储服务实例
        RepositoryService repositoryService = engine.getRepositoryService();
        // 得到身份服务组件
        IdentityService identityService = engine.getIdentityService();
        // 部署流程描述文件
        Deployment dep = repositoryService.createDeployment()
                .addClasspathResource("bpmn/candidateQuery.bpmn").deploy();
        // 添加2个用户
        creatUser(identityService, "user1", "张三", "张三", "mail1", "123");
        creatUser(identityService, "user2", "李四", "李四", "mail2", "123");
        // 添加2个用户组
        createGroup(identityService, "group1", "经理组", "manager");
        createGroup(identityService, "group2", "员工组", "employee");
        // 查询流程定义
        ProcessDefinition def = repositoryService
                .createProcessDefinitionQuery().deploymentId(dep.getId())
                .singleResult();
        // 设置权限数据
        repositoryService.addCandidateStarterGroup(def.getId(), "group1");
        repositoryService.addCandidateStarterGroup(def.getId(), "group2");
        repositoryService.addCandidateStarterUser(def.getId(), "user1");
        repositoryService.addCandidateStarterUser(def.getId(), "user2");
        // 根据用户查询用权限的流程定义
        List<ProcessDefinition> defs = repositoryService
                .createProcessDefinitionQuery().startableByUser("user1").list();
        System.out.println("用户张三有权限的流程定义为:");// 结果为1
        for (ProcessDefinition dft : defs) {
            System.out.println("   " + dft.getName());
        }
        // 根据流程定义查询用户组数据
        List<Group> groups = identityService.createGroupQuery()
                .potentialStarter(def.getId()).list();
        System.out.println("以下用户组对流程定义有权限:");
        for (Group group : groups) {
            System.out.println("   " + group.getName());
        }
        // 根据流程定义查询用户数据
        List<User> users = identityService.createUserQuery()
                .potentialStarter(def.getId()).list();
        System.out.println("以下用户对流程定义有权限:");// 结果为2
        for (User user : users) {
            System.out.println("   " + user.getFirstName());
        }
        // 根据流程定义查询全部的 IdentityLink(ACT_RU_IDENTITYLINK表) 数据
        List<IdentityLink> links = repositoryService
                .getIdentityLinksForProcessDefinition(def.getId());
        System.out.println("与流程定义相关的数据量: " + links.size());// 结果为4
    }


    // 将用户组数据保存到数据库中
    static void createGroup( IdentityService identityService, String id,
                             String name, String type ) {
        // 调用newGroup方法创建Group实例
        Group group = identityService.newGroup(id);
        group.setName(name);
        group.setType(type);
        identityService.saveGroup(group);
    }


    // 创建用户方法
    static void creatUser( IdentityService identityService, String id,
                           String first, String last, String email, String passwd ) {
        // 使用newUser方法创建User实例
        User user = identityService.newUser(id);
        // 设置用户的各个属性
        user.setFirstName(first);
        user.setLastName(last);
        user.setEmail(email);
        user.setPassword(passwd);
        // 使用saveUser方法保存用户
        identityService.saveUser(user);
    }
}

二 流程文件

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn"
    xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
    xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema"
    expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
    <process id="vacationProcess" name="vacation">
        <startEvent id="startevent1" name="Start"></startEvent>
        <userTask id="usertask1" name="Write Vacation"></userTask>
        <endEvent id="endevent1" name="End"></endEvent>
        <sequenceFlow id="flow1" name="" sourceRef="startevent1"
            targetRef="usertask1"></sequenceFlow>
        <sequenceFlow id="flow2" name="" sourceRef="usertask1"
            targetRef="endevent1"></sequenceFlow>
    </process>
</definitions>

三 运行结果

用户张三有权限的流程定义为:
   vacation
以下用户组对流程定义有权限:
   经理组
   员工组
以下用户对流程定义有权限:
   张三
   李四
与流程定义相关的数据量: 4

四 数据库

1 act_re_deployment

mysql> select * from act_re_deployment;
+-------+-------+-----------+------+------------+-------------------------+-----------------+
| ID_   | NAME_ | CATEGORY_ | KEY_ | TENANT_ID_ | DEPLOY_TIME_            | ENGINE_VERSION_ |
+-------+-------+-----------+------+------------+-------------------------+-----------------+
| 67501 | NULL  | NULL      | NULL |            | 2020-04-18 11:18:11.614 | NULL            |
+-------+-------+-----------+------+------------+-------------------------+-----------------+
1 row in set (0.00 sec)

2 act_re_procdef

mysql> select * from act_re_procdef;
+-------------------------+------+------------------------------+----------+-----------------+----------+----------------+--------------------------+---------------------+--------------+---------------------+-------------------------+-------------------+------------+-----------------+
| ID_                     | REV_ | CATEGORY_                    | NAME_    | KEY_            | VERSION_ | DEPLOYMENT_ID_ | RESOURCE_NAME_           | DGRM_RESOURCE_NAME_ | DESCRIPTION_ | HAS_START_FORM_KEY_ | HAS_GRAPHICAL_NOTATION_ | SUSPENSION_STATE_ | TENANT_ID_ | ENGINE_VERSION_ |
+-------------------------+------+------------------------------+----------+-----------------+----------+----------------+--------------------------+---------------------+--------------+---------------------+-------------------------+-------------------+------------+-----------------+
| vacationProcess:1:67503 |    1 | http://www.activiti.org/test | vacation | vacationProcess |        1 | 67501          | bpmn/candidateQuery.bpmn | NULL                | NULL         |                   0 |                       0 |                 1 |            | NULL            |
+-------------------------+------+------------------------------+----------+-----------------+----------+----------------+--------------------------+---------------------+--------------+---------------------+-------------------------+-------------------+------------+-----------------+
1 row in set (0.00 sec)

3 act_id_user

mysql> select * from act_id_user;
+-------+------+--------+--------+--------+------+-------------+
| ID_   | REV_ | FIRST_ | LAST_  | EMAIL_ | PWD_ | PICTURE_ID_ |
+-------+------+--------+--------+--------+------+-------------+
| user1 |    1 | 张三   | 张三   | mail1  | 123  | NULL        |
| user2 |    1 | 李四   | 李四   | mail2  | 123  | NULL        |
+-------+------+--------+--------+--------+------+-------------+

4 act_id_group

mysql> select * from act_id_group;
+--------+------+-----------+----------+
| ID_    | REV_ | NAME_     | TYPE_    |
+--------+------+-----------+----------+
| group1 |    1 | 经理组    | manager  |
| group2 |    1 | 员工组    | employee |
+--------+------+-----------+----------+
2 rows in set (0.00 sec)

5 act_ge_bytearray

6 act_ru_identitylink

mysql> select * from act_ru_identitylink;
+-------+------+-----------+-----------+----------+----------+---------------+-------------------------+
| ID_   | REV_ | GROUP_ID_ | TYPE_     | USER_ID_ | TASK_ID_ | PROC_INST_ID_ | PROC_DEF_ID_            |
+-------+------+-----------+-----------+----------+----------+---------------+-------------------------+
| 67504 |    1 | group1    | candidate | NULL     | NULL     | NULL          | vacationProcess:1:67503 |
| 67505 |    1 | group2    | candidate | NULL     | NULL     | NULL          | vacationProcess:1:67503 |
| 67506 |    1 | NULL      | candidate | user1    | NULL     | NULL          | vacationProcess:1:67503 |
| 67507 |    1 | NULL      | candidate | user2    | NULL     | NULL          | vacationProcess:1:67503 |
+-------+------+-----------+-----------+----------+----------+---------------+-------------------------+
4 rows in set (0.00 sec)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值