This is an automated email from the ASF dual-hosted git repository.

dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new a148af2792 [INLONG-8404][Manager] Workflow support multi-tenancy 
(#8410)
a148af2792 is described below

commit a148af2792568593e430374b2707892d89d74224
Author: vernedeng <[email protected]>
AuthorDate: Tue Jul 4 20:57:58 2023 +0800

    [INLONG-8404][Manager] Workflow support multi-tenancy (#8410)
    
    Co-authored-by: healchow <[email protected]>
---
 .../manager/dao/entity/WorkflowApproverEntity.java |  1 +
 .../manager/dao/entity/WorkflowProcessEntity.java  |  1 +
 .../manager/dao/entity/WorkflowTaskEntity.java     |  1 +
 .../dao/interceptor/MultiTenantInterceptor.java    | 59 ++++++++++++++++------
 .../dao/mapper/WorkflowApproverEntityMapper.java   |  2 +
 .../dao/mapper/WorkflowProcessEntityMapper.java    |  2 +
 .../dao/mapper/WorkflowTaskEntityMapper.java       |  2 +
 .../mappers/WorkflowApproverEntityMapper.xml       | 25 ++++++---
 .../mappers/WorkflowProcessEntityMapper.xml        | 28 ++++++----
 .../resources/mappers/WorkflowTaskEntityMapper.xml | 34 ++++++++-----
 .../manager/pojo/group/InlongGroupPageRequest.java |  4 ++
 .../manager/pojo/workflow/ApproverPageRequest.java |  3 ++
 .../manager/pojo/workflow/ProcessCountRequest.java |  3 ++
 .../manager/pojo/workflow/ProcessRequest.java      |  3 ++
 .../manager/pojo/workflow/TaskCountRequest.java    |  3 ++
 .../inlong/manager/pojo/workflow/TaskRequest.java  |  3 ++
 .../service/group/InlongGroupProcessService.java   | 15 ++++--
 .../group/apply/ApproveApplyProcessListener.java   |  6 ++-
 .../listener/queue/QueueResourceListener.java      |  7 ++-
 .../service/stream/InlongStreamProcessService.java | 17 +++++--
 .../manager/service/workflow/WorkflowService.java  | 40 +++++++++++++--
 .../main/resources/h2/apache_inlong_manager.sql    |  9 ++--
 .../manager-web/sql/apache_inlong_manager.sql      |  9 ++--
 inlong-manager/manager-web/sql/changes-1.8.0.sql   |  8 +++
 24 files changed, 218 insertions(+), 67 deletions(-)

diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowApproverEntity.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowApproverEntity.java
index 3dbc857de2..f8a7ff2ce1 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowApproverEntity.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowApproverEntity.java
@@ -32,6 +32,7 @@ public class WorkflowApproverEntity implements Serializable {
     private Integer id;
     private String processName;
     private String taskName;
+    private String tenant;
     private String approvers;
     private String creator;
     private String modifier;
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowProcessEntity.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowProcessEntity.java
index b295e1e402..89bfaf11ea 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowProcessEntity.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowProcessEntity.java
@@ -35,6 +35,7 @@ public class WorkflowProcessEntity {
 
     private String inlongGroupId;
     private String inlongStreamId;
+    private String tenant;
     private String applicant;
     private String status;
     private String formData;
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowTaskEntity.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowTaskEntity.java
index b0e9ba24f0..d4f7d09636 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowTaskEntity.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/WorkflowTaskEntity.java
@@ -38,6 +38,7 @@ public class WorkflowTaskEntity {
     private String processName;
     private String processDisplayName;
 
+    private String tenant;
     private String applicant;
     private String approvers;
     private String status;
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/interceptor/MultiTenantInterceptor.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/interceptor/MultiTenantInterceptor.java
index 9b09bf58ee..7ba50a1ab2 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/interceptor/MultiTenantInterceptor.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/interceptor/MultiTenantInterceptor.java
@@ -20,12 +20,12 @@ package org.apache.inlong.manager.dao.interceptor;
 import org.apache.inlong.manager.common.consts.InlongConstants;
 import org.apache.inlong.manager.common.exceptions.BusinessException;
 import org.apache.inlong.manager.common.tenant.MultiTenantQuery;
-import org.apache.inlong.manager.common.util.JsonUtils;
 import org.apache.inlong.manager.pojo.user.LoginUserUtils;
 import org.apache.inlong.manager.pojo.user.UserInfo;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.binding.MapperMethod;
 import org.apache.ibatis.cache.CacheKey;
 import org.apache.ibatis.executor.Executor;
 import org.apache.ibatis.executor.parameter.ParameterHandler;
@@ -47,6 +47,7 @@ import 
org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
 
+import java.lang.reflect.Field;
 import java.sql.PreparedStatement;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -108,7 +109,7 @@ public class MultiTenantInterceptor implements Interceptor {
 
             List<ParameterMapping> parameterMappings = 
boundSql.getParameterMappings();
             // new param mapping
-            Map<String, Object> newParameter = makeNewParameters(parameter, 
parameterMappings);
+            Object newParameter = makeNewParameters(parameter, 
parameterMappings);
             // update params
             invocation.getArgs()[1] = newParameter;
 
@@ -130,33 +131,59 @@ public class MultiTenantInterceptor implements 
Interceptor {
 
         Object parameterObject = 
metaResultSetHandler.getValue("parameterObject");
         BoundSql boundSql = (BoundSql) 
metaResultSetHandler.getValue("boundSql");
-        Map<String, Object> newParams = makeNewParameters(parameterObject, 
boundSql.getParameterMappings());
+        Object newParams = makeNewParameters(parameterObject, 
boundSql.getParameterMappings());
 
         metaResultSetHandler.setValue("parameterObject", newParams);
         return invocation.proceed();
     }
 
-    private Map<String, Object> makeNewParameters(Object parameterObject, 
List<ParameterMapping> parameters) {
-        Map<String, Object> params;
-
+    @SuppressWarnings("unchecked")
+    private Object makeNewParameters(Object parameterObject, 
List<ParameterMapping> parameters) {
         // only the single param query has no property name, find it in 
parameters.
         if (isPrimitiveOrWrapper(parameterObject) && parameters.size() == 2) {
-            params = new LinkedHashMap<>();
-
-            // find the param not tenant
-            int idx = 0;
-            if (KEY_TENANT.equals(parameters.get(0).getProperty())) {
-                idx = 1;
-            }
-            params.put(parameters.get(idx).getProperty(), parameterObject);
+            return makeNewParametersFromPrimitive(parameterObject, parameters);
+        } else if (parameterObject instanceof MapperMethod.ParamMap) {
+            return makeNewParametersFromMap((MapperMethod.ParamMap<String>) 
parameterObject);
         } else {
-            String jsonStr = JsonUtils.toJsonString(parameterObject);
-            params = JsonUtils.parseObject(jsonStr, Map.class);
+            return makeNewParametersFromEntity(parameterObject);
+        }
+    }
+
+    private Object makeNewParametersFromMap(MapperMethod.ParamMap<String> 
parameterObject) {
+        parameterObject.put(KEY_TENANT, getTenant());
+        return parameterObject;
+    }
+
+    private Object makeNewParametersFromPrimitive(Object parameterObject, 
List<ParameterMapping> parameters) {
+        Map<String, Object> params = new LinkedHashMap<>();
+
+        // find the param not tenant
+        int idx = 0;
+        if (KEY_TENANT.equals(parameters.get(0).getProperty())) {
+            idx = 1;
         }
+        params.put(parameters.get(idx).getProperty(), parameterObject);
         params.put(KEY_TENANT, getTenant());
         return params;
     }
 
+    private Object makeNewParametersFromEntity(Object parameterObject) {
+        Field[] fields = parameterObject.getClass().getDeclaredFields();
+
+        try {
+            for (Field field : fields) {
+                if (!field.getName().equals(KEY_TENANT)) {
+                    continue;
+                }
+                field.setAccessible(true);
+                field.set(parameterObject, getTenant());
+            }
+        } catch (Exception e) {
+            log.error("failed to set tenant into parameters=" + 
parameterObject, e);
+        }
+        return parameterObject;
+    }
+
     private boolean isPrimitiveOrWrapper(Object obj) {
         try {
             Class<?> clazz = obj.getClass();
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowApproverEntityMapper.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowApproverEntityMapper.java
index fa48f7c980..193bc00050 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowApproverEntityMapper.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowApproverEntityMapper.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.dao.mapper;
 
+import org.apache.inlong.manager.common.tenant.MultiTenantQuery;
 import org.apache.inlong.manager.dao.entity.WorkflowApproverEntity;
 import org.apache.inlong.manager.pojo.workflow.ApproverPageRequest;
 
@@ -26,6 +27,7 @@ import org.springframework.stereotype.Repository;
 import java.util.List;
 
 @Repository
+@MultiTenantQuery
 public interface WorkflowApproverEntityMapper {
 
     int insert(WorkflowApproverEntity record);
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowProcessEntityMapper.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowProcessEntityMapper.java
index a68ce1249c..cc0d6502c9 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowProcessEntityMapper.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowProcessEntityMapper.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.dao.mapper;
 
+import org.apache.inlong.manager.common.tenant.MultiTenantQuery;
 import org.apache.inlong.manager.dao.entity.WorkflowProcessEntity;
 import org.apache.inlong.manager.pojo.common.CountInfo;
 import org.apache.inlong.manager.pojo.workflow.ProcessCountRequest;
@@ -31,6 +32,7 @@ import java.util.List;
  * Workflow process mapper
  */
 @Repository
+@MultiTenantQuery
 public interface WorkflowProcessEntityMapper {
 
     Integer insert(WorkflowProcessEntity workflowProcessEntity);
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowTaskEntityMapper.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowTaskEntityMapper.java
index 5c987d37c3..2b1781c3d1 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowTaskEntityMapper.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/WorkflowTaskEntityMapper.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.dao.mapper;
 
 import org.apache.inlong.manager.common.enums.TaskStatus;
+import org.apache.inlong.manager.common.tenant.MultiTenantQuery;
 import org.apache.inlong.manager.dao.entity.WorkflowTaskEntity;
 import org.apache.inlong.manager.pojo.common.CountInfo;
 import org.apache.inlong.manager.pojo.workflow.TaskCountRequest;
@@ -32,6 +33,7 @@ import java.util.List;
  * Workflow task mapper
  */
 @Repository
+@MultiTenantQuery
 public interface WorkflowTaskEntityMapper {
 
     int insert(WorkflowTaskEntity workflowTaskEntity);
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowApproverEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowApproverEntityMapper.xml
index 65d7972d3b..baa785a70f 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowApproverEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowApproverEntityMapper.xml
@@ -24,6 +24,7 @@
         <id column="id" jdbcType="INTEGER" property="id"/>
         <result column="process_name" jdbcType="VARCHAR" 
property="processName"/>
         <result column="task_name" jdbcType="VARCHAR" property="taskName"/>
+        <result column="tenant" jdbcType="VARCHAR" property="tenant"/>
         <result column="approvers" jdbcType="VARCHAR" property="approvers"/>
         <result column="creator" jdbcType="VARCHAR" property="creator"/>
         <result column="modifier" jdbcType="VARCHAR" property="modifier"/>
@@ -33,22 +34,27 @@
         <result column="version" jdbcType="INTEGER" property="version"/>
     </resultMap>
     <sql id="Base_Column_List">
-        id, process_name, task_name, approvers, creator, modifier, 
create_time, modify_time, is_deleted, version
+        id, process_name, task_name, tenant, approvers, creator, modifier,
+        create_time, modify_time, is_deleted, version
     </sql>
 
     <insert id="insert" useGeneratedKeys="true" keyProperty="id"
             
parameterType="org.apache.inlong.manager.dao.entity.WorkflowApproverEntity">
         insert into workflow_approver (id, process_name, task_name,
-                                       approvers, creator, modifier)
+                                       tenant, approvers,
+                                       creator, modifier)
         values (#{id, jdbcType=INTEGER}, #{processName, jdbcType=VARCHAR}, 
#{taskName, jdbcType=VARCHAR},
-                #{approvers, jdbcType=VARCHAR}, #{creator, jdbcType=VARCHAR}, 
#{modifier, jdbcType=VARCHAR})
+                #{tenant,jdbcType=VARCHAR}, #{approvers, jdbcType=VARCHAR},
+                #{creator, jdbcType=VARCHAR}, #{modifier, jdbcType=VARCHAR})
     </insert>
 
-    <select id="selectById" parameterType="java.lang.Integer" 
resultMap="BaseResultMap">
+    <select id="selectById" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List"/>
         from workflow_approver
-        where id = #{id, jdbcType=INTEGER} and is_deleted=0
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and id = #{id, jdbcType=INTEGER}
+        and is_deleted = 0
     </select>
     <select id="selectByCondition" resultMap="BaseResultMap"
             
parameterType="org.apache.inlong.manager.pojo.workflow.ApproverPageRequest">
@@ -56,7 +62,8 @@
         <include refid="Base_Column_List"/>
         from workflow_approver
         <where>
-            is_deleted = 0
+            tenant = #{tenant,jdbcType=VARCHAR}
+            and is_deleted = 0
             <if test="currentUser != null and currentUser != '' and 
isAdminRole == false">
                 and (
                 creator = #{currentUser, jdbcType=VARCHAR} or 
find_in_set(#{currentUser, jdbcType=VARCHAR}, approvers)
@@ -86,7 +93,8 @@
             modifier     = #{modifier, jdbcType=VARCHAR},
             is_deleted   = #{isDeleted, jdbcType=INTEGER},
             version      = #{version, jdbcType=INTEGER} + 1
-        where id = #{id, jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+          and id = #{id, jdbcType=INTEGER}
           and is_deleted = 0
           and version = #{version, jdbcType=INTEGER}
     </update>
@@ -95,6 +103,7 @@
         update workflow_approver
         set is_deleted = id,
             modifier=#{modifier, jdbcType=VARCHAR}
-        where id = #{id, jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and id = #{id, jdbcType=INTEGER}
     </delete>
 </mapper>
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowProcessEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowProcessEntityMapper.xml
index 8b122ab127..8ba32b2799 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowProcessEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowProcessEntityMapper.xml
@@ -28,6 +28,7 @@
         <result column="title" jdbcType="VARCHAR" property="title"/>
         <result column="inlong_group_id" jdbcType="VARCHAR" 
property="inlongGroupId"/>
         <result column="inlong_stream_id" jdbcType="VARCHAR" 
property="inlongStreamId"/>
+        <result column="tenant" jdbcType="VARCHAR" property="tenant"/>
         <result column="applicant" jdbcType="VARCHAR" property="applicant"/>
         <result column="status" jdbcType="VARCHAR" property="status"/>
         <result column="start_time" jdbcType="TIMESTAMP" property="startTime"/>
@@ -38,27 +39,29 @@
     </resultMap>
     <sql id="Base_Column_List">
         id, name, display_name, type, title, inlong_group_id, inlong_stream_id,
-        applicant, status, start_time, end_time, hidden, form_data, ext_params
+        tenant, applicant, status, start_time, end_time, hidden, form_data, 
ext_params
     </sql>
 
     <insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id"
             
parameterType="org.apache.inlong.manager.dao.entity.WorkflowProcessEntity">
         insert into workflow_process (name, display_name, type,
                                       title, inlong_group_id, inlong_stream_id,
-                                      applicant, status, start_time,
-                                      end_time, form_data, ext_params, hidden)
+                                      tenant, applicant, status,
+                                      start_time, end_time, form_data,
+                                      ext_params, hidden)
         values (#{name,jdbcType=VARCHAR}, #{displayName,jdbcType=VARCHAR}, 
#{type,jdbcType=VARCHAR},
                 #{title,jdbcType=VARCHAR}, #{inlongGroupId,jdbcType=VARCHAR}, 
#{inlongStreamId,jdbcType=VARCHAR},
-                #{applicant,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, 
#{startTime,jdbcType=TIMESTAMP},
-                #{endTime,jdbcType=TIMESTAMP}, 
#{formData,jdbcType=LONGVARCHAR}, #{extParams,jdbcType=LONGVARCHAR},
-                #{hidden,jdbcType=TINYINT})
+                #{tenant,jdbcType=VARCHAR}, #{applicant,jdbcType=VARCHAR}, 
#{status,jdbcType=VARCHAR},
+                #{startTime,jdbcType=TIMESTAMP}, 
#{endTime,jdbcType=TIMESTAMP}, #{formData,jdbcType=LONGVARCHAR},
+                #{extParams,jdbcType=LONGVARCHAR}, #{hidden,jdbcType=TINYINT})
     </insert>
 
-    <select id="selectById" parameterType="java.lang.Integer" 
resultMap="BaseResultMap">
+    <select id="selectById" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List"/>
         from workflow_process
-        where id = #{id,jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and id = #{id,jdbcType=INTEGER}
     </select>
     <select id="selectByCondition" 
parameterType="org.apache.inlong.manager.pojo.workflow.ProcessRequest"
             resultMap="BaseResultMap">
@@ -66,6 +69,7 @@
         <include refid="Base_Column_List"/>
         from workflow_process
         <where>
+            tenant = #{tenant,jdbcType=VARCHAR}
             <if test="id != null">
                 and id = #{id,jdbcType=INTEGER}
             </if>
@@ -114,13 +118,14 @@
         </where>
         order by id desc
     </select>
-    <select id="selectByInlongGroupIds" resultType="java.lang.Integer">
+    <select id="selectByInlongGroupIds">
         select id
         from workflow_process
         where inlong_group_id in
         <foreach item="item" index="index" collection="groupIdList" open="(" 
close=")" separator=",">
             #{item}
         </foreach>
+        and tenant = #{tenant,jdbcType=VARCHAR}
     </select>
 
     <select id="countByQuery" 
parameterType="org.apache.inlong.manager.pojo.workflow.ProcessCountRequest"
@@ -128,6 +133,7 @@
         select status as `key`, count(1) as `value`
         from workflow_process
         <where>
+            tenant = #{tenant,jdbcType=VARCHAR}
             <if test="name != null and name !=''">
                 and name = #{name,jdbcType=VARCHAR}
             </if>
@@ -164,7 +170,8 @@
         set status     = #{status,jdbcType=VARCHAR},
             end_time   = #{endTime,jdbcType=TIMESTAMP},
             ext_params = #{extParams,jdbcType=LONGVARCHAR}
-        where id = #{id,jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and id = #{id,jdbcType=INTEGER}
     </update>
 
     <delete id="deleteByProcessIds">
@@ -174,5 +181,6 @@
         <foreach item="item" index="index" collection="processIdList" open="(" 
close=")" separator=",">
             #{item}
         </foreach>
+        and tenant = #{tenant,jdbcType=VARCHAR}
     </delete>
 </mapper>
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowTaskEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowTaskEntityMapper.xml
index 84294c1287..d415c4efb9 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowTaskEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/WorkflowTaskEntityMapper.xml
@@ -28,6 +28,7 @@
         <result column="process_display_name" jdbcType="VARCHAR" 
property="processDisplayName"/>
         <result column="name" jdbcType="VARCHAR" property="name"/>
         <result column="display_name" jdbcType="VARCHAR" 
property="displayName"/>
+        <result column="tenant" jdbcType="VARCHAR" property="tenant"/>
         <result column="applicant" jdbcType="VARCHAR" property="applicant"/>
         <result column="approvers" jdbcType="VARCHAR" property="approvers"/>
         <result column="status" jdbcType="VARCHAR" property="status"/>
@@ -40,35 +41,39 @@
     </resultMap>
 
     <sql id="Base_Column_List">
-        id, type, process_id, process_name, process_display_name, name, 
display_name, applicant, approvers,
+        id, type, process_id, process_name, process_display_name, name, 
display_name, tenant, applicant, approvers,
         status, operator, remark, start_time, end_time, form_data, ext_params
     </sql>
 
     <insert id="insert" useGeneratedKeys="true" keyProperty="id"
             
parameterType="org.apache.inlong.manager.dao.entity.WorkflowTaskEntity">
-        insert into workflow_task (id, type, process_id, process_name, 
process_display_name, name,
-                                   display_name, applicant, approvers, status,
+        insert into workflow_task (id, type, process_id,
+                                   process_name, process_display_name,
+                                   name, display_name, tenant,
+                                   applicant, approvers, status,
                                    operator, remark, start_time,
                                    end_time, form_data, ext_params)
         values (#{id,jdbcType=INTEGER}, #{type,jdbcType=VARCHAR}, 
#{processId,jdbcType=INTEGER},
-                #{processName,jdbcType=VARCHAR}, 
#{processDisplayName,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
-                #{displayName,jdbcType=VARCHAR}, 
#{applicant,jdbcType=VARCHAR}, #{approvers,jdbcType=VARCHAR},
-                #{status,jdbcType=VARCHAR},
+                #{processName,jdbcType=VARCHAR}, 
#{processDisplayName,jdbcType=VARCHAR},
+                #{name,jdbcType=VARCHAR}, #{displayName,jdbcType=VARCHAR},  
#{tenant,jdbcType=VARCHAR},
+                #{applicant,jdbcType=VARCHAR}, #{approvers,jdbcType=VARCHAR}, 
#{status,jdbcType=VARCHAR},
                 #{operator,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, 
#{startTime,jdbcType=TIMESTAMP},
                 #{endTime,jdbcType=TIMESTAMP}, 
#{formData,jdbcType=LONGVARCHAR}, #{extParams,jdbcType=LONGVARCHAR})
     </insert>
 
-    <select id="selectById" parameterType="java.lang.Integer" 
resultMap="BaseResultMap">
+    <select id="selectById" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List"/>
         from workflow_task
-        where id = #{id,jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and id = #{id,jdbcType=INTEGER}
     </select>
     <select id="selectByProcess" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List"/>
         from workflow_task
-        where process_id = #{processId,jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and process_id = #{processId,jdbcType=INTEGER}
         and status = #{status,jdbcType=VARCHAR}
     </select>
     <select id="selectByQuery"
@@ -78,6 +83,7 @@
         <include refid="Base_Column_List"/>
         from workflow_task
         <where>
+            tenant = #{tenant,jdbcType=VARCHAR}
             <if test="id != null">
                 and id = #{id,jdbcType=INTEGER}
             </if>
@@ -126,10 +132,11 @@
         </where>
         order by id desc
     </select>
-    <select id="countByStatus" resultType="java.lang.Integer">
+    <select id="countByStatus">
         select count(1)
         from workflow_task
-        where process_id = #{processId, jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+          and process_id = #{processId, jdbcType=INTEGER}
           and name = #{name, jdbcType=VARCHAR}
           and status = #{status, jdbcType=VARCHAR}
     </select>
@@ -139,6 +146,7 @@
         select status as `key`, count(1) as `value`
         from workflow_task
         <where>
+            tenant = #{tenant,jdbcType=VARCHAR}
             <if test="processId != null">
                 and process_id = #{processId,jdbcType=INTEGER}
             </if>
@@ -184,7 +192,8 @@
             form_data  = #{formData,jdbcType=LONGVARCHAR},
             ext_params = #{extParams,jdbcType=LONGVARCHAR},
             end_time   = #{endTime,jdbcType=TIMESTAMP}
-        where id = #{id,jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and id = #{id,jdbcType=INTEGER}
     </update>
 
     <delete id="deleteByProcessIds">
@@ -194,5 +203,6 @@
         <foreach item="item" index="index" collection="processIdList" open="(" 
close=")" separator=",">
             #{item}
         </foreach>
+        and tenant = #{tenant,jdbcType=VARCHAR}
     </delete>
 </mapper>
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/InlongGroupPageRequest.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/InlongGroupPageRequest.java
index 83855aa582..5d7c24b295 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/InlongGroupPageRequest.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/InlongGroupPageRequest.java
@@ -64,10 +64,14 @@ public class InlongGroupPageRequest extends PageRequest {
     @ApiModelProperty(value = "Current user", hidden = true)
     private String currentUser;
 
+    @ApiModelProperty(value = "Inlong tenant name", hidden = true)
+    private String tenant;
+
     @ApiModelProperty(value = "Whether the current user is in the 
administrator role", hidden = true)
     private Boolean isAdminRole;
 
     @ApiModelProperty(value = "If list streamSource for group", hidden = true)
     @Builder.Default
     private boolean listSources = false;
+
 }
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ApproverPageRequest.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ApproverPageRequest.java
index 6673bae188..3cd74c89df 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ApproverPageRequest.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ApproverPageRequest.java
@@ -47,6 +47,9 @@ public class ApproverPageRequest extends PageRequest {
     @ApiModelProperty("Workflow task name")
     private String taskName;
 
+    @ApiModelProperty("Inlong tenant name")
+    private String tenant;
+
     @ApiModelProperty("Specified workflow approver")
     private String approver;
 
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ProcessCountRequest.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ProcessCountRequest.java
index 07ca9dc28e..f701b970e3 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ProcessCountRequest.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ProcessCountRequest.java
@@ -37,6 +37,9 @@ public class ProcessCountRequest {
     @ApiModelProperty("Process display name")
     private String displayName;
 
+    @ApiModelProperty("Inlong tenant name")
+    private String tenant;
+
     @ApiModelProperty("Applicant")
     private String applicant;
 
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ProcessRequest.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ProcessRequest.java
index 77aa644021..5b8fe435ef 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ProcessRequest.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/ProcessRequest.java
@@ -55,6 +55,9 @@ public class ProcessRequest extends PageRequest {
     @ApiModelProperty("Process display name")
     private String displayName;
 
+    @ApiModelProperty("Inlong tenant name")
+    private String tenant;
+
     @ApiModelProperty("Applicant")
     private String applicant;
 
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/TaskCountRequest.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/TaskCountRequest.java
index dbf13347fb..76b4b922dd 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/TaskCountRequest.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/TaskCountRequest.java
@@ -49,6 +49,9 @@ public class TaskCountRequest {
     @ApiModelProperty("Task display name")
     private String displayName;
 
+    @ApiModelProperty("Inlong tenant")
+    private String tenant;
+
     @ApiModelProperty("Applicant name")
     private String applicant;
 
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/TaskRequest.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/TaskRequest.java
index 0a27ef104c..c031db6490 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/TaskRequest.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/workflow/TaskRequest.java
@@ -58,6 +58,9 @@ public class TaskRequest extends PageRequest {
     @ApiModelProperty("Task display name")
     private String displayName;
 
+    @ApiModelProperty("Inlong tenant of workflow")
+    private String tenant;
+
     @ApiModelProperty("Applicant name")
     private String applicant;
 
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupProcessService.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupProcessService.java
index 172ed6f190..339f10b01c 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupProcessService.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupProcessService.java
@@ -34,6 +34,7 @@ import org.apache.inlong.manager.pojo.group.InlongGroupInfo;
 import org.apache.inlong.manager.pojo.group.InlongGroupResetRequest;
 import org.apache.inlong.manager.pojo.stream.InlongStreamBriefInfo;
 import org.apache.inlong.manager.pojo.stream.InlongStreamInfo;
+import org.apache.inlong.manager.pojo.user.LoginUserUtils;
 import org.apache.inlong.manager.pojo.user.UserInfo;
 import org.apache.inlong.manager.pojo.workflow.ProcessRequest;
 import org.apache.inlong.manager.pojo.workflow.TaskResponse;
@@ -130,7 +131,9 @@ public class InlongGroupProcessService {
         groupService.updateStatus(groupId, GroupStatus.SUSPENDING.getCode(), 
operator);
         InlongGroupInfo groupInfo = groupService.get(groupId);
         GroupResourceProcessForm form = genGroupResourceProcessForm(groupInfo, 
GroupOperateType.SUSPEND);
-        EXECUTOR_SERVICE.execute(() -> 
workflowService.start(ProcessName.SUSPEND_GROUP_PROCESS, operator, form));
+        UserInfo userInfo = LoginUserUtils.getLoginUser();
+        EXECUTOR_SERVICE.execute(
+                () -> 
workflowService.startAsync(ProcessName.SUSPEND_GROUP_PROCESS, userInfo, form));
 
         LOGGER.info("success to suspend process asynchronously for groupId={} 
by operator={}", groupId, operator);
         return groupId;
@@ -175,7 +178,9 @@ public class InlongGroupProcessService {
         groupService.updateStatus(groupId, GroupStatus.RESTARTING.getCode(), 
operator);
         InlongGroupInfo groupInfo = groupService.get(groupId);
         GroupResourceProcessForm form = genGroupResourceProcessForm(groupInfo, 
GroupOperateType.RESTART);
-        EXECUTOR_SERVICE.execute(() -> 
workflowService.start(ProcessName.RESTART_GROUP_PROCESS, operator, form));
+        UserInfo userInfo = LoginUserUtils.getLoginUser();
+        EXECUTOR_SERVICE.execute(
+                () -> 
workflowService.startAsync(ProcessName.RESTART_GROUP_PROCESS, userInfo, form));
 
         LOGGER.info("success to restart process asynchronously for groupId={} 
by operator={}", groupId, operator);
         return groupId;
@@ -312,9 +317,9 @@ public class InlongGroupProcessService {
             List<WorkflowProcessEntity> entities = 
workflowQueryService.listProcessEntity(processQuery);
             
entities.sort(Comparator.comparingInt(WorkflowProcessEntity::getId));
             WorkflowProcessEntity lastProcess = entities.get(entities.size() - 
1);
-            EXECUTOR_SERVICE.execute(() -> {
-                workflowService.continueProcess(lastProcess.getId(), operator, 
"Reset group status");
-            });
+            UserInfo userInfo = LoginUserUtils.getLoginUser();
+            EXECUTOR_SERVICE.execute(
+                    () -> 
workflowService.continueProcessAsync(lastProcess.getId(), userInfo, "Reset 
group status"));
             return true;
         }
         if (resetFinalStatus == 1) {
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/listener/group/apply/ApproveApplyProcessListener.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/listener/group/apply/ApproveApplyProcessListener.java
index 9d065e3dbd..4d285488f6 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/listener/group/apply/ApproveApplyProcessListener.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/listener/group/apply/ApproveApplyProcessListener.java
@@ -22,6 +22,8 @@ import org.apache.inlong.manager.common.enums.ProcessName;
 import org.apache.inlong.manager.common.exceptions.WorkflowListenerException;
 import org.apache.inlong.manager.pojo.group.InlongGroupInfo;
 import org.apache.inlong.manager.pojo.stream.InlongStreamInfo;
+import org.apache.inlong.manager.pojo.user.LoginUserUtils;
+import org.apache.inlong.manager.pojo.user.UserInfo;
 import 
org.apache.inlong.manager.pojo.workflow.form.process.ApplyGroupProcessForm;
 import 
org.apache.inlong.manager.pojo.workflow.form.process.GroupResourceProcessForm;
 import org.apache.inlong.manager.service.group.InlongGroupService;
@@ -72,7 +74,9 @@ public class ApproveApplyProcessListener implements 
ProcessEventListener {
         processForm.setStreamInfos(streamList);
 
         // may run for long time, make it async processing
-        EXECUTOR_SERVICE.execute(() -> 
workflowService.start(ProcessName.CREATE_GROUP_RESOURCE, username, 
processForm));
+        UserInfo userInfo = LoginUserUtils.getLoginUser();
+        EXECUTOR_SERVICE.execute(
+                () -> 
workflowService.startAsync(ProcessName.CREATE_GROUP_RESOURCE, userInfo, 
processForm));
         log.info("success to execute ApproveApplyProcessListener for 
groupId={}", groupId);
         return ListenerResult.success();
     }
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/listener/queue/QueueResourceListener.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/listener/queue/QueueResourceListener.java
index 2348b058d1..4bab2a146b 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/listener/queue/QueueResourceListener.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/listener/queue/QueueResourceListener.java
@@ -25,6 +25,8 @@ import org.apache.inlong.manager.common.enums.TaskStatus;
 import org.apache.inlong.manager.common.exceptions.WorkflowListenerException;
 import org.apache.inlong.manager.pojo.group.InlongGroupInfo;
 import org.apache.inlong.manager.pojo.stream.InlongStreamInfo;
+import org.apache.inlong.manager.pojo.user.LoginUserUtils;
+import org.apache.inlong.manager.pojo.user.UserInfo;
 import org.apache.inlong.manager.pojo.workflow.TaskResponse;
 import org.apache.inlong.manager.pojo.workflow.WorkflowResult;
 import 
org.apache.inlong.manager.pojo.workflow.form.process.GroupResourceProcessForm;
@@ -152,9 +154,10 @@ public class QueueResourceListener implements 
QueueOperateListener {
             StreamResourceProcessForm form = 
StreamResourceProcessForm.getProcessForm(groupInfo, stream, INIT);
             String streamId = stream.getInlongStreamId();
             final String errMsg = "failed to start stream process for 
groupId=" + groupId + " streamId=" + streamId;
-
+            UserInfo userInfo = LoginUserUtils.getLoginUser();
             CompletableFuture<WorkflowResult> future = CompletableFuture
-                    .supplyAsync(() -> 
workflowService.start(CREATE_STREAM_RESOURCE, operator, form), EXECUTOR_SERVICE)
+                    .supplyAsync(() -> 
workflowService.startAsync(CREATE_STREAM_RESOURCE, userInfo, form),
+                            EXECUTOR_SERVICE)
                     .whenComplete((result, ex) -> {
                         if (ex != null) {
                             log.error(errMsg + ": " + ex.getMessage());
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/stream/InlongStreamProcessService.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/stream/InlongStreamProcessService.java
index 3e9bbe5062..8f87a8e957 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/stream/InlongStreamProcessService.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/stream/InlongStreamProcessService.java
@@ -27,6 +27,8 @@ import 
org.apache.inlong.manager.common.exceptions.BusinessException;
 import org.apache.inlong.manager.common.util.Preconditions;
 import org.apache.inlong.manager.pojo.group.InlongGroupInfo;
 import org.apache.inlong.manager.pojo.stream.InlongStreamInfo;
+import org.apache.inlong.manager.pojo.user.LoginUserUtils;
+import org.apache.inlong.manager.pojo.user.UserInfo;
 import org.apache.inlong.manager.pojo.workflow.WorkflowResult;
 import 
org.apache.inlong.manager.pojo.workflow.form.process.StreamResourceProcessForm;
 import org.apache.inlong.manager.service.group.InlongGroupService;
@@ -108,7 +110,9 @@ public class InlongStreamProcessService {
             ProcessStatus processStatus = 
workflowResult.getProcessInfo().getStatus();
             return processStatus == ProcessStatus.COMPLETED;
         } else {
-            EXECUTOR_SERVICE.execute(() -> workflowService.start(processName, 
operator, processForm));
+            UserInfo userInfo = LoginUserUtils.getLoginUser();
+            EXECUTOR_SERVICE.execute(
+                    () -> workflowService.startAsync(processName, userInfo, 
processForm));
             return true;
         }
     }
@@ -148,7 +152,9 @@ public class InlongStreamProcessService {
             ProcessStatus processStatus = 
workflowResult.getProcessInfo().getStatus();
             return processStatus == ProcessStatus.COMPLETED;
         } else {
-            EXECUTOR_SERVICE.execute(() -> workflowService.start(processName, 
operator, processForm));
+            UserInfo userInfo = LoginUserUtils.getLoginUser();
+            EXECUTOR_SERVICE.execute(
+                    () -> workflowService.startAsync(processName, userInfo, 
processForm));
             return true;
         }
     }
@@ -188,7 +194,9 @@ public class InlongStreamProcessService {
             ProcessStatus processStatus = 
workflowResult.getProcessInfo().getStatus();
             return processStatus == ProcessStatus.COMPLETED;
         } else {
-            EXECUTOR_SERVICE.execute(() -> workflowService.start(processName, 
operator, processForm));
+            UserInfo userInfo = LoginUserUtils.getLoginUser();
+            EXECUTOR_SERVICE.execute(
+                    () -> workflowService.startAsync(processName, userInfo, 
processForm));
             return true;
         }
     }
@@ -236,12 +244,15 @@ public class InlongStreamProcessService {
                 return false;
             }
         } else {
+            UserInfo userInfo = LoginUserUtils.getLoginUser();
             EXECUTOR_SERVICE.execute(() -> {
+                LoginUserUtils.setUserLoginInfo(userInfo);
                 WorkflowResult workflowResult = 
workflowService.start(processName, operator, processForm);
                 ProcessStatus processStatus = 
workflowResult.getProcessInfo().getStatus();
                 if (processStatus == ProcessStatus.COMPLETED) {
                     streamService.delete(groupId, streamId, operator);
                 }
+                LoginUserUtils.removeUserLoginInfo();
             });
             return true;
         }
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/workflow/WorkflowService.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/workflow/WorkflowService.java
index cb56b72e00..7f751930ae 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/workflow/WorkflowService.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/workflow/WorkflowService.java
@@ -19,6 +19,8 @@ package org.apache.inlong.manager.service.workflow;
 
 import org.apache.inlong.manager.common.enums.ProcessName;
 import org.apache.inlong.manager.pojo.common.PageResult;
+import org.apache.inlong.manager.pojo.user.LoginUserUtils;
+import org.apache.inlong.manager.pojo.user.UserInfo;
 import org.apache.inlong.manager.pojo.workflow.ProcessCountRequest;
 import org.apache.inlong.manager.pojo.workflow.ProcessCountResponse;
 import org.apache.inlong.manager.pojo.workflow.ProcessDetailResponse;
@@ -44,13 +46,28 @@ public interface WorkflowService {
     /**
      * Initiation process
      *
-     * @param process Process name
-     * @param applicant Applicant
-     * @param form Process form
-     * @return result
+     * @param process process name
+     * @param applicant applicant name
+     * @param form process form
+     * @return workflow result
      */
     WorkflowResult start(ProcessName process, String applicant, ProcessForm 
form);
 
+    /**
+     * Initiation process async
+     *
+     * @param process process name
+     * @param userInfo login user info
+     * @param form process form
+     * @return workflow result
+     */
+    default WorkflowResult startAsync(ProcessName process, UserInfo userInfo, 
ProcessForm form) {
+        LoginUserUtils.setUserLoginInfo(userInfo);
+        WorkflowResult result = start(process, userInfo.getName(), form);
+        LoginUserUtils.removeUserLoginInfo();
+        return result;
+    }
+
     /**
      * Continue process when pending or failed
      *
@@ -61,6 +78,21 @@ public interface WorkflowService {
      */
     WorkflowResult continueProcess(Integer processId, String operator, String 
remark);
 
+    /**
+     * Continue process when pending or failed
+     *
+     * @param processId Process id.
+     * @param userInfo userInfo.
+     * @param remark Remarks information.
+     * @return Workflow result.
+     */
+    default WorkflowResult continueProcessAsync(Integer processId, UserInfo 
userInfo, String remark) {
+        LoginUserUtils.setUserLoginInfo(userInfo);
+        WorkflowResult result = continueProcess(processId, userInfo.getName(), 
remark);
+        LoginUserUtils.removeUserLoginInfo();
+        return result;
+    }
+
     /**
      * Cancellation process application
      *
diff --git 
a/inlong-manager/manager-test/src/main/resources/h2/apache_inlong_manager.sql 
b/inlong-manager/manager-test/src/main/resources/h2/apache_inlong_manager.sql
index 0f4c8a76c0..73a656acfa 100644
--- 
a/inlong-manager/manager-test/src/main/resources/h2/apache_inlong_manager.sql
+++ 
b/inlong-manager/manager-test/src/main/resources/h2/apache_inlong_manager.sql
@@ -585,6 +585,7 @@ CREATE TABLE IF NOT EXISTS `workflow_approver`
     `id`           int(11)       NOT NULL AUTO_INCREMENT,
     `process_name` varchar(256)  NOT NULL COMMENT 'Process name',
     `task_name`    varchar(256)  NOT NULL COMMENT 'Approval task name',
+    `tenant`       varchar(256)  NOT NULL DEFAULT 'public' COMMENT 'Inlong 
tenant of workflow approver',
     `approvers`    varchar(1024) NOT NULL COMMENT 'Approvers, separated by 
commas',
     `creator`      varchar(64)   NOT NULL COMMENT 'Creator name',
     `modifier`     varchar(64)            DEFAULT NULL COMMENT 'Modifier name',
@@ -597,9 +598,9 @@ CREATE TABLE IF NOT EXISTS `workflow_approver`
 );
 
 -- create workflow approver for newly inlong group and inlong consume.
-INSERT INTO `workflow_approver`(`process_name`, `task_name`, `approvers`, 
`creator`, `modifier`)
-VALUES ('APPLY_GROUP_PROCESS', 'ut_admin', 'admin', 'inlong_init', 
'inlong_init'),
-       ('APPLY_CONSUME_PROCESS', 'ut_admin', 'admin', 'inlong_init', 
'inlong_init');
+INSERT INTO `workflow_approver`(`process_name`, `task_name`, `tenant`, 
`approvers`, `creator`, `modifier`)
+VALUES ('APPLY_GROUP_PROCESS', 'ut_admin', 'public', 'admin', 'inlong_init', 
'inlong_init'),
+       ('APPLY_CONSUME_PROCESS', 'ut_admin', 'public', 'admin', 'inlong_init', 
'inlong_init');
 
 -- ----------------------------
 -- Table structure for workflow_event_log
@@ -641,6 +642,7 @@ CREATE TABLE IF NOT EXISTS `workflow_process`
     `title`            varchar(256)          DEFAULT NULL COMMENT 'Process 
title',
     `inlong_group_id`  varchar(256)          DEFAULT NULL COMMENT 'Inlong 
group id to which this process belongs',
     `inlong_stream_id` varchar(256)          DEFAULT NULL COMMENT 'Inlong 
stream id to which this process belongs',
+    `tenant`           varchar(256) NOT NULL DEFAULT 'public' COMMENT 'Inlong 
tenant of workflow process',
     `applicant`        varchar(256) NOT NULL COMMENT 'Applicant',
     `status`           varchar(64)  NOT NULL COMMENT 'Status',
     `form_data`        mediumtext COMMENT 'Form information',
@@ -664,6 +666,7 @@ CREATE TABLE IF NOT EXISTS `workflow_task`
     `process_display_name` varchar(256)  NOT NULL COMMENT 'Process name',
     `name`                 varchar(256)  NOT NULL COMMENT 'Task name',
     `display_name`         varchar(256)  NOT NULL COMMENT 'Task display name',
+    `tenant`               varchar(256)  NOT NULL DEFAULT 'public' COMMENT 
'Inlong tenant of workflow task',
     `applicant`            varchar(64)   DEFAULT NULL COMMENT 'Applicant',
     `approvers`            varchar(1024) NOT NULL COMMENT 'Approvers',
     `status`               varchar(64)   NOT NULL COMMENT 'Status',
diff --git a/inlong-manager/manager-web/sql/apache_inlong_manager.sql 
b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
index e131511bee..d2a6173b4c 100644
--- a/inlong-manager/manager-web/sql/apache_inlong_manager.sql
+++ b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
@@ -622,6 +622,7 @@ CREATE TABLE IF NOT EXISTS `workflow_approver`
     `id`           int(11)       NOT NULL AUTO_INCREMENT,
     `process_name` varchar(256)  NOT NULL COMMENT 'Process name',
     `task_name`    varchar(256)  NOT NULL COMMENT 'Approval task name',
+    `tenant`       varchar(256)  NOT NULL DEFAULT 'public' COMMENT 'Inlong 
tenant of workflow approver',
     `approvers`    varchar(1024) NOT NULL COMMENT 'Approvers, separated by 
commas',
     `creator`      varchar(64)   NOT NULL COMMENT 'Creator name',
     `modifier`     varchar(64)            DEFAULT NULL COMMENT 'Modifier name',
@@ -635,9 +636,9 @@ CREATE TABLE IF NOT EXISTS `workflow_approver`
   DEFAULT CHARSET = utf8mb4 COMMENT ='Workflow approver table';
 
 -- create workflow approver for newly inlong group and inlong consume.
-INSERT INTO `workflow_approver`(`process_name`, `task_name`, `approvers`, 
`creator`, `modifier`)
-VALUES ('APPLY_GROUP_PROCESS', 'ut_admin', 'admin', 'inlong_init', 
'inlong_init'),
-       ('APPLY_CONSUME_PROCESS', 'ut_admin', 'admin', 'inlong_init', 
'inlong_init');
+INSERT INTO `workflow_approver`(`process_name`, `task_name`, `tenant`, 
`approvers`, `creator`, `modifier`)
+VALUES ('APPLY_GROUP_PROCESS', 'ut_admin', 'public', 'admin', 'inlong_init', 
'inlong_init'),
+       ('APPLY_CONSUME_PROCESS', 'ut_admin', 'public', 'admin', 'inlong_init', 
'inlong_init');
 
 -- ----------------------------
 -- Table structure for workflow_event_log
@@ -680,6 +681,7 @@ CREATE TABLE IF NOT EXISTS `workflow_process`
     `title`            varchar(256)          DEFAULT NULL COMMENT 'Process 
title',
     `inlong_group_id`  varchar(256)          DEFAULT NULL COMMENT 'Inlong 
group id to which this process belongs',
     `inlong_stream_id` varchar(256)          DEFAULT NULL COMMENT 'Inlong 
stream id to which this process belongs',
+    `tenant`           varchar(256) NOT NULL DEFAULT 'public' COMMENT 'Inlong 
tenant of workflow process',
     `applicant`        varchar(256) NOT NULL COMMENT 'Applicant',
     `status`           varchar(64)  NOT NULL COMMENT 'Status',
     `form_data`        mediumtext COMMENT 'Form information',
@@ -704,6 +706,7 @@ CREATE TABLE IF NOT EXISTS `workflow_task`
     `process_display_name` varchar(256)  NOT NULL COMMENT 'Process name',
     `name`                 varchar(256)  NOT NULL COMMENT 'Task name',
     `display_name`         varchar(256)  NOT NULL COMMENT 'Task display name',
+    `tenant`               varchar(256)  NOT NULL DEFAULT 'public' COMMENT 
'Inlong tenant of workflow task',
     `applicant`            varchar(64)   DEFAULT NULL COMMENT 'Applicant',
     `approvers`            varchar(1024) NOT NULL COMMENT 'Approvers',
     `status`               varchar(64)   NOT NULL COMMENT 'Status',
diff --git a/inlong-manager/manager-web/sql/changes-1.8.0.sql 
b/inlong-manager/manager-web/sql/changes-1.8.0.sql
index 0a33640d1e..8af19b0e22 100644
--- a/inlong-manager/manager-web/sql/changes-1.8.0.sql
+++ b/inlong-manager/manager-web/sql/changes-1.8.0.sql
@@ -110,3 +110,11 @@ ALTER TABLE `inlong_consume`
     ADD `tenant` VARCHAR(256) DEFAULT 'public' NOT NULL comment 'Inlong tenant 
of consume' after `ext_params`;
 CREATE INDEX consume_tenant_index
     ON inlong_consume (`tenant`, `is_deleted`);
+
+-- To support multi-tenancy of workflow. Please see #8404
+ALTER TABLE `workflow_approver`
+    ADD `tenant` VARCHAR(256) DEFAULT 'public' NOT NULL comment 'Inlong tenant 
of workflow approver' after `task_name`;
+ALTER TABLE `workflow_process`
+    ADD `tenant` VARCHAR(256) DEFAULT 'public' NOT NULL comment 'Inlong tenant 
of workflow process' after `inlong_stream_id`;
+ALTER TABLE `workflow_task`
+    ADD `tenant` VARCHAR(256) DEFAULT 'public' NOT NULL comment 'Inlong tenant 
of workflow task' after `display_name`;

Reply via email to