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

vernedeng 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 6bf6c69c6f [INLONG-8567][Manager] Add new role INLONG_SERVICE for 
internal service query (#8568)
6bf6c69c6f is described below

commit 6bf6c69c6fe6b58daa4b953d01e1b2aa3321c636
Author: vernedeng <verned...@apache.org>
AuthorDate: Wed Jul 19 18:21:02 2023 +0800

    [INLONG-8567][Manager] Add new role INLONG_SERVICE for internal service 
query (#8568)
---
 .../dao/interceptor/MultiTenantInterceptor.java    |  50 ++++++-
 .../resources/mappers/DataNodeEntityMapper.xml     |  68 ++++++---
 .../mappers/InlongClusterEntityMapper.xml          |  76 +++++++---
 .../mappers/InlongClusterTagEntityMapper.xml       |  45 ++++--
 .../mappers/InlongConsumeEntityMapper.xml          |  92 ++++++++----
 .../resources/mappers/InlongGroupEntityMapper.xml  | 155 +++++++++++++++------
 .../inlong/manager/pojo/user/UserRoleCode.java     |   5 +
 .../service/core/impl/SortSourceServiceImpl.java   |   2 +-
 .../service/tenant/InlongTenantServiceImpl.java    |  12 +-
 .../service/user/TenantRoleServiceImpl.java        |   2 +-
 .../manager/service/sort/SortServiceImplTest.java  |  18 +++
 .../web/auth/tenant/TenantAuthenticatingRealm.java |   8 +-
 12 files changed, 405 insertions(+), 128 deletions(-)

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 7ba50a1ab2..4e79ede37a 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
@@ -24,6 +24,7 @@ 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.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.binding.MapperMethod;
 import org.apache.ibatis.cache.CacheKey;
@@ -32,6 +33,7 @@ import org.apache.ibatis.executor.parameter.ParameterHandler;
 import org.apache.ibatis.mapping.BoundSql;
 import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.mapping.ParameterMapping;
+import org.apache.ibatis.ognl.ASTConst;
 import org.apache.ibatis.plugin.Interceptor;
 import org.apache.ibatis.plugin.Intercepts;
 import org.apache.ibatis.plugin.Invocation;
@@ -44,8 +46,10 @@ import 
org.apache.ibatis.reflection.factory.DefaultObjectFactory;
 import org.apache.ibatis.reflection.factory.ObjectFactory;
 import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
 import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
+import org.apache.ibatis.scripting.xmltags.OgnlCache;
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
+import org.apache.ibatis.type.StringTypeHandler;
 
 import java.lang.reflect.Field;
 import java.sql.PreparedStatement;
@@ -54,6 +58,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
+import static org.apache.inlong.manager.pojo.user.UserRoleCode.INLONG_SERVICE;
+
 /**
  * This interceptor intercept those queries annotated by {@link 
MultiTenantQuery}.
  *
@@ -74,6 +80,7 @@ import java.util.Properties;
 public class MultiTenantInterceptor implements Interceptor {
 
     private static final String KEY_TENANT = "tenant";
+    private static final String KEY_INLONG_SERVICE = "LoginUser.InlongService";
     private static final ObjectFactory DEFAULT_OBJECT_FACTORY = new 
DefaultObjectFactory();
     private static final ObjectWrapperFactory DEFAULT_OBJECT_WRAPPER_FACTORY = 
new DefaultObjectWrapperFactory();
     private static final ReflectorFactory REFLECTOR_FACTORY = new 
DefaultReflectorFactory();
@@ -94,6 +101,7 @@ public class MultiTenantInterceptor implements Interceptor {
         if 
(!MultiTenantQueryFilter.isMultiTenantQuery(fullMethodName.split(InlongConstants.UNDERSCORE)[0]))
 {
             return invocation.proceed();
         }
+        this.setExpressionCache();
         try {
             Object[] args = invocation.getArgs();
             MappedStatement ms = (MappedStatement) args[0];
@@ -106,8 +114,9 @@ public class MultiTenantInterceptor implements Interceptor {
                 // 6 params
                 boundSql = (BoundSql) args[5];
             }
-
             List<ParameterMapping> parameterMappings = 
boundSql.getParameterMappings();
+
+            this.setTenantMapping(parameterMappings);
             // new param mapping
             Object newParameter = makeNewParameters(parameter, 
parameterMappings);
             // update params
@@ -128,11 +137,11 @@ public class MultiTenantInterceptor implements 
Interceptor {
         if 
(!MultiTenantQueryFilter.isMultiTenantQuery(fullMethodName.split(InlongConstants.UNDERSCORE)[0]))
 {
             return invocation.proceed();
         }
-
+        this.setExpressionCache();
         Object parameterObject = 
metaResultSetHandler.getValue("parameterObject");
         BoundSql boundSql = (BoundSql) 
metaResultSetHandler.getValue("boundSql");
         Object newParams = makeNewParameters(parameterObject, 
boundSql.getParameterMappings());
-
+        this.setTenantMapping(boundSql.getParameterMappings());
         metaResultSetHandler.setValue("parameterObject", newParams);
         return invocation.proceed();
     }
@@ -208,6 +217,41 @@ public class MultiTenantInterceptor implements Interceptor 
{
         return tenant;
     }
 
+    private boolean isInlongService() {
+        UserInfo userInfo = LoginUserUtils.getLoginUser();
+        if (userInfo == null) {
+            throw new BusinessException("Current user is null, please login 
first");
+        }
+        if (CollectionUtils.isEmpty(userInfo.getRoles())) {
+            return false;
+        }
+        return userInfo.getRoles().contains(INLONG_SERVICE);
+    }
+
+    private void setExpressionCache() throws NoSuchFieldException, 
IllegalAccessException {
+        Field cacheFiled = OgnlCache.class.getDeclaredField("expressionCache");
+        cacheFiled.setAccessible(true);
+        Map<String, Object> expressionCache = (Map<String, Object>) 
cacheFiled.get(null);
+        ASTConst node = new ASTConst(31);
+        node.setValue(this.isInlongService());
+        expressionCache.put(KEY_INLONG_SERVICE, node);
+    }
+
+    private void setTenantMapping(List<ParameterMapping> parameterMappings)
+            throws NoSuchFieldException, IllegalAccessException {
+        for (ParameterMapping mapping : parameterMappings) {
+            if (mapping.getProperty().equals(KEY_TENANT)) {
+                Field javaType = 
mapping.getClass().getDeclaredField("javaType");
+                javaType.setAccessible(true);
+                javaType.set(mapping, String.class);
+
+                Field typeHandler = 
mapping.getClass().getDeclaredField("typeHandler");
+                typeHandler.setAccessible(true);
+                typeHandler.set(mapping, new StringTypeHandler());
+            }
+        }
+    }
+
     @Override
     public Object plugin(Object target) {
         return Plugin.wrap(target, this);
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/DataNodeEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/DataNodeEntityMapper.xml
index 8cc5ab30e3..954744839c 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/DataNodeEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/DataNodeEntityMapper.xml
@@ -60,30 +60,43 @@
     </insert>
 
     <select id="selectById" resultMap="BaseResultMap">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from data_node
-        where tenant = #{tenant, jdbcType=VARCHAR}
-        and is_deleted = 0
-        and id = #{id, jdbcType=INTEGER}
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            and id = #{id, jdbcType=INTEGER}
+        </where>
     </select>
     <select id="selectByUniqueKey" 
resultType="org.apache.inlong.manager.dao.entity.DataNodeEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from data_node
-        where tenant = #{tenant, jdbcType=VARCHAR}
-        and is_deleted = 0
-        and name = #{name, jdbcType=VARCHAR}
-        and type = #{type, jdbcType=VARCHAR}
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            and name = #{name, jdbcType=VARCHAR}
+            and type = #{type, jdbcType=VARCHAR}
+        </where>
     </select>
     <select id="selectByCondition"
             
parameterType="org.apache.inlong.manager.pojo.node.DataNodePageRequest"
             resultType="org.apache.inlong.manager.dao.entity.DataNodeEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from data_node
         <where>
-            tenant = #{tenant, jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
             and is_deleted = 0
             <if test="name != null and name != ''">
                 and name = #{name, jdbcType=VARCHAR}
@@ -106,12 +119,19 @@
         order by modify_time desc
     </select>
     <select id="selectAllDataNodes" 
resultType="org.apache.inlong.manager.dao.entity.DataNodeEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from data_node
-        where is_deleted = 0
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+        </where>
     </select>
     <update id="updateById" 
parameterType="org.apache.inlong.manager.dao.entity.DataNodeEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update data_node
         set name         = #{name, jdbcType=VARCHAR},
             display_name = #{displayName, jdbcType=VARCHAR},
@@ -126,11 +146,16 @@
             is_deleted   = #{isDeleted, jdbcType=INTEGER},
             modifier     = #{modifier, jdbcType=VARCHAR},
             version      = #{version, jdbcType=INTEGER} + 1
-        where tenant = #{tenant, jdbcType=VARCHAR}
-          and id = #{id, jdbcType=INTEGER}
-          and version = #{version, jdbcType=INTEGER}
+        <where>
+            id = #{id, jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and version = #{version, jdbcType=INTEGER}
+        </where>
     </update>
     <update id="updateByIdSelective" 
parameterType="org.apache.inlong.manager.dao.entity.DataNodeEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update data_node
         <set>
             <if test="name != null">
@@ -171,16 +196,25 @@
             </if>
             version = #{version, jdbcType=INTEGER} + 1
         </set>
-        where tenant = #{tenant, jdbcType=VARCHAR}
-        and id = #{id, jdbcType=INTEGER}
-        and version = #{version, jdbcType=INTEGER}
+        <where>
+            id = #{id, jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant, jdbcType=VARCHAR}
+            </if>
+            and version = #{version, jdbcType=INTEGER}
+        </where>
     </update>
 
     <delete id="deleteById">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         delete
         from data_node
-        where tenant = #{tenant, jdbcType=VARCHAR}
-        and id = #{id, jdbcType=INTEGER}
+        <where>
+            id = #{id, jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant, jdbcType=VARCHAR}
+            </if>
+        </where>
     </delete>
 
 </mapper>
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterEntityMapper.xml
index e513afe492..9f8a21d851 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterEntityMapper.xml
@@ -67,38 +67,45 @@
         insert into inlong_cluster (id, name, display_name, type,
                                     url, cluster_tags, ext_tag,
                                     token, ext_params, heartbeat,
-                                    tenant, in_charges, status,
+                                    in_charges, status,
                                     creator, modifier)
         values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, 
#{displayName,jdbcType=VARCHAR},
                 #{type,jdbcType=VARCHAR}, #{url,jdbcType=VARCHAR}, 
#{clusterTags,jdbcType=VARCHAR},
                 #{extTag,jdbcType=VARCHAR},#{token,jdbcType=VARCHAR}, 
#{extParams,jdbcType=LONGVARCHAR},
-                #{heartbeat,jdbcType=LONGVARCHAR}, #{tenant,jdbcType=VARCHAR}, 
#{inCharges,jdbcType=VARCHAR},
+                #{heartbeat,jdbcType=LONGVARCHAR}, 
#{inCharges,jdbcType=VARCHAR},
                 #{status,jdbcType=INTEGER}, #{creator,jdbcType=VARCHAR}, 
#{modifier,jdbcType=VARCHAR})
         ON DUPLICATE KEY UPDATE cluster_tags = VALUES(cluster_tags),
                                 ext_tag      = VALUES(ext_tag),
                                 token        = VALUES(token),
                                 ext_params   = VALUES(ext_params),
                                 heartbeat    = VALUES(heartbeat),
-                                tenant       = VALUES(tenant),
                                 in_charges   = VALUES(in_charges),
                                 status       = VALUES(status),
                                 modifier     = VALUES(modifier)
     </insert>
 
     <select id="selectById" resultMap="BaseResultMap">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_cluster
-        where tenant = #{tenant,jdbcType=VARCHAR}
-        and is_deleted = 0
-        and id = #{id,jdbcType=INTEGER}
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            and id = #{id,jdbcType=INTEGER}
+        </where>
     </select>
     <select id="selectByKey" 
resultType="org.apache.inlong.manager.dao.entity.InlongClusterEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_cluster
         <where>
-            tenant = #{tenant,jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
             and is_deleted = 0
             <if test="type != null and type != ''">
                 and type = #{type, jdbcType=VARCHAR}
@@ -113,11 +120,14 @@
         order by modify_time desc
     </select>
     <select id="selectByNameAndType" 
resultType="org.apache.inlong.manager.dao.entity.InlongClusterEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_cluster
         <where>
-            tenant = #{tenant,jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
             and is_deleted = 0
             <if test="type != null and type != ''">
                 and type = #{type, jdbcType=VARCHAR}
@@ -131,11 +141,14 @@
     <select id="selectByCondition"
             
parameterType="org.apache.inlong.manager.pojo.cluster.ClusterPageRequest"
             
resultType="org.apache.inlong.manager.dao.entity.InlongClusterEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_cluster
         <where>
-            tenant = #{tenant,jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
             and is_deleted = 0
             <if test="name != null and name != ''">
                 and name = #{name, jdbcType=VARCHAR}
@@ -175,11 +188,14 @@
         order by modify_time desc
     </select>
     <select id="selectByClusterTag" 
resultType="org.apache.inlong.manager.dao.entity.InlongClusterEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_cluster
         <where>
-            tenant = #{tenant,jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
             and is_deleted = 0
             <if test="clusterTag != null and clusterTag != ''">
                 and find_in_set(#{clusterTag, jdbcType=VARCHAR}, cluster_tags)
@@ -188,6 +204,7 @@
         order by modify_time desc
     </select>
     <select id="selectAllClusters" 
resultType="org.apache.inlong.manager.pojo.sort.standalone.SortSourceClusterInfo">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select name,
                type,
                url,
@@ -195,10 +212,16 @@
                ext_tag,
                ext_params
         from inlong_cluster
-        where is_deleted = 0
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+        </where>
     </select>
 
     <update id="updateById" 
parameterType="org.apache.inlong.manager.dao.entity.InlongClusterEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update inlong_cluster
         set name                 = #{name,jdbcType=VARCHAR},
             display_name         = #{displayName,jdbcType=VARCHAR},
@@ -215,11 +238,16 @@
             is_deleted           = #{isDeleted,jdbcType=INTEGER},
             modifier             = #{modifier,jdbcType=VARCHAR},
             version              = #{version,jdbcType=INTEGER} + 1
-        where tenant = #{tenant,jdbcType=VARCHAR}
-          and id = #{id,jdbcType=INTEGER}
-          and version = #{version,jdbcType=INTEGER}
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and id = #{id,jdbcType=INTEGER}
+            and version = #{version,jdbcType=INTEGER}
+        </where>
     </update>
     <update id="updateByIdSelective" 
parameterType="org.apache.inlong.manager.dao.entity.InlongClusterEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update inlong_cluster
         <set>
             <if test="name != null">
@@ -266,15 +294,25 @@
             </if>
             version = #{version,jdbcType=INTEGER} + 1
         </set>
-        where tenant = #{tenant,jdbcType=VARCHAR}
-        and id = #{id,jdbcType=INTEGER}
-        and version = #{version,jdbcType=INTEGER}
+        <where>
+            id = #{id,jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and version = #{version,jdbcType=INTEGER}
+        </where>
+
     </update>
 
     <delete id="deleteByPrimaryKey">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         delete
         from inlong_cluster
-        where tenant = #{tenant,jdbcType=VARCHAR}
-        and id = #{id,jdbcType=INTEGER}
+        <where>
+            id = #{id,jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+        </where>
     </delete>
 </mapper>
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterTagEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterTagEntityMapper.xml
index 96160b856d..23fc343001 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterTagEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterTagEntityMapper.xml
@@ -51,28 +51,41 @@
     </insert>
 
     <select id="selectById" resultMap="BaseResultMap">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_cluster_tag
-        where tenant = #{tenant,jdbcType=VARCHAR}
-        and id = #{id,jdbcType=INTEGER}
+        <where>
+            id = #{id,jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+        </where>
     </select>
     <select id="selectByTag" 
resultType="org.apache.inlong.manager.dao.entity.InlongClusterTagEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_cluster_tag
-        where tenant = #{tenant,jdbcType=VARCHAR}
-        and cluster_tag = #{clusterTag, jdbcType=VARCHAR}
-        and is_deleted = 0
+        <where>
+            cluster_tag = #{clusterTag, jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+        </where>
     </select>
     <select id="selectByCondition"
             
parameterType="org.apache.inlong.manager.pojo.cluster.ClusterTagPageRequest"
             
resultType="org.apache.inlong.manager.dao.entity.InlongClusterTagEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_cluster_tag
         <where>
-            tenant = #{tenant,jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
             and is_deleted = 0
             <if test="keyword != null and keyword != ''">
                 and cluster_tag like CONCAT('%', #{keyword}, '%')
@@ -82,6 +95,7 @@
     </select>
 
     <update id="updateByIdSelective" 
parameterType="org.apache.inlong.manager.dao.entity.InlongClusterTagEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update inlong_cluster_tag
         <set>
             <if test="clusterTag != null">
@@ -107,15 +121,24 @@
             </if>
             version     = #{version,jdbcType=INTEGER} + 1
         </set>
-        where tenant = #{tenant,jdbcType=VARCHAR}
-          and id = #{id,jdbcType=INTEGER}
-          and version = #{version,jdbcType=INTEGER}
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and id = #{id,jdbcType=INTEGER}
+            and version = #{version,jdbcType=INTEGER}
+        </where>
     </update>
 
     <delete id="deleteByPrimaryKey">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         delete
         from inlong_cluster_tag
-        where tenant = #{tenant,jdbcType=VARCHAR}
-        and id = #{id,jdbcType=INTEGER}
+        <where>
+            id = #{id,jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+        </where>
     </delete>
 </mapper>
\ No newline at end of file
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongConsumeEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongConsumeEntityMapper.xml
index e3047cc22d..22ba07f829 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongConsumeEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongConsumeEntityMapper.xml
@@ -65,38 +65,56 @@
     </insert>
 
     <select id="selectById" resultMap="BaseResultMap">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_consume
-        where tenant = #{tenant, jdbcType=VARCHAR}
-        and id = #{id, jdbcType=INTEGER}
+        <where>
+            id = #{id, jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+        </where>
     </select>
     <select id="countByUser" 
resultType="org.apache.inlong.manager.pojo.common.CountInfo">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select status as `key`, count(1) as `value`
         from inlong_consume
-        where tenant = #{tenant, jdbcType=VARCHAR}
-        and is_deleted = 0
-        and (creator = #{username, jdbcType=VARCHAR} or 
FIND_IN_SET(#{username, jdbcType=VARCHAR}, in_charges))
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            and (creator = #{username, jdbcType=VARCHAR} or 
FIND_IN_SET(#{username, jdbcType=VARCHAR}, in_charges))
+        </where>
         group by status
     </select>
     <select id="selectExists" 
resultType="org.apache.inlong.manager.dao.entity.InlongConsumeEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_consume
-        where tenant = #{tenant, jdbcType=VARCHAR}
-        and is_deleted = 0
-        and consumer_group = #{consumerGroup, jdbcType=VARCHAR}
-        and topic = #{topic, jdbcType=VARCHAR}
-        and inlong_group_id = #{inlongGroupId, jdbcType=VARCHAR}
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            and consumer_group = #{consumerGroup, jdbcType=VARCHAR}
+            and topic = #{topic, jdbcType=VARCHAR}
+            and inlong_group_id = #{inlongGroupId, jdbcType=VARCHAR}
+        </where>
         limit 1
     </select>
     <select id="selectByCondition" resultMap="BaseResultMap"
             
parameterType="org.apache.inlong.manager.pojo.consume.InlongConsumePageRequest">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_consume
         <where>
-            tenant = #{tenant, jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
             and is_deleted = 0
             <if test="keyword != null and keyword !=''">
                 and (consumer_group like CONCAT('%', #{keyword}, '%') or topic 
like CONCAT('%', #{keyword}, '%'))
@@ -134,11 +152,14 @@
     </select>
     <select id="selectBriefList" 
parameterType="org.apache.inlong.manager.pojo.consume.InlongConsumePageRequest"
             
resultType="org.apache.inlong.manager.pojo.consume.InlongConsumeBriefInfo">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select id, consumer_group, mq_type, topic, inlong_group_id,
         in_charges, status, creator, modifier, create_time, modify_time
         from inlong_consume
         <where>
-            tenant = #{tenant, jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
             and is_deleted = 0
             <if test="keyword != null and keyword !=''">
                 and (consumer_group like CONCAT('%', #{keyword}, '%') or topic 
like CONCAT('%', #{keyword}, '%'))
@@ -176,6 +197,7 @@
     </select>
 
     <update id="updateById" 
parameterType="org.apache.inlong.manager.dao.entity.InlongConsumeEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update inlong_consume
         set consumer_group   = #{consumerGroup, jdbcType=VARCHAR},
             description      = #{description, jdbcType=VARCHAR},
@@ -191,14 +213,20 @@
             modifier         = #{modifier, jdbcType=VARCHAR},
             is_deleted       = #{isDeleted, jdbcType=INTEGER},
             version          = #{version, jdbcType=INTEGER} + 1
-        where tenant = #{tenant, jdbcType=VARCHAR}
-          and id = #{id, jdbcType=INTEGER}
-          and is_deleted = 0
-          and version = #{version, jdbcType=INTEGER}
+        <where>
+            id = #{id, jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            and version = #{version, jdbcType=INTEGER}
+        </where>
+
     </update>
 
     <update id="updateByIdSelective"
             
parameterType="org.apache.inlong.manager.dao.entity.InlongConsumeEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update inlong_consume
         <set>
             <if test="consumerGroup != null">
@@ -242,25 +270,39 @@
             </if>
             version = #{version, jdbcType=INTEGER} + 1
         </set>
-        where tenant = #{tenant, jdbcType=VARCHAR}
-        and id = #{id, jdbcType=INTEGER}
-        and is_deleted = 0
-        and version = #{version, jdbcType=INTEGER}
+        <where>
+            id = #{id, jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            and version = #{version, jdbcType=INTEGER}
+        </where>
     </update>
     <update id="updateStatus">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update inlong_consume
         set previous_status = status,
             status          = #{status, jdbcType=INTEGER},
             modifier        = #{modifier, jdbcType=VARCHAR}
-        where tenant = #{tenant, jdbcType=VARCHAR}
-          and id = #{id,jdbcType=INTEGER}
-          and is_deleted = 0
+        <where>
+            id = #{id,jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+        </where>
     </update>
 
     <delete id="deleteById">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         delete
         from inlong_consume
-        where tenant = #{tenant, jdbcType=VARCHAR}
-        and id = #{id,jdbcType=INTEGER}
+        <where>
+            id = #{id,jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+        </where>
     </delete>
 </mapper>
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
index 8237726115..6b763e475d 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
@@ -207,46 +207,70 @@
     </insert>
 
     <select id="selectByPrimaryKey" resultMap="BaseResultMap">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_group
-        where id = #{id,jdbcType=INTEGER}
-        and tenant = #{tenant,jdbcType=VARCHAR}
+        <where>
+            id = #{id,jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+        </where>
     </select>
     <select id="countGroupByUser" resultMap="statusCountMap">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select count(*) as total, status
         from inlong_group
-        where is_deleted = 0
-          and tenant = #{tenant,jdbcType=VARCHAR}
-          <if test="inlongGroupMode != null">
-              and inlong_group_mode = #{inlongGroupMode,jdbcType=TINYINT}
-          </if>
-          and (creator = #{username,jdbcType=VARCHAR} or 
find_in_set(#{username,jdbcType=VARCHAR}, in_charges))
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            <if test="inlongGroupMode != null">
+                and inlong_group_mode = #{inlongGroupMode,jdbcType=TINYINT}
+            </if>
+            and (creator = #{username,jdbcType=VARCHAR} or 
find_in_set(#{username,jdbcType=VARCHAR}, in_charges))
+        </where>
         group by status
     </select>
     <select id="selectByGroupId" resultMap="BaseResultMap">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_group
-        where inlong_group_id = #{groupId, jdbcType=VARCHAR}
-        and tenant = #{tenant, jdbcType=VARCHAR}
-        and is_deleted = 0
+        <where>
+            inlong_group_id = #{groupId, jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+        </where>
     </select>
     <select id="selectByGroupIdForUpdate" resultMap="BaseResultMap">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_group
-        where inlong_group_id = #{groupId, jdbcType=VARCHAR}
-        and tenant = #{tenant,jdbcType=VARCHAR}
-        and is_deleted = 0 for update
+        <where>
+            inlong_group_id = #{groupId, jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+        </where>
+         for update
     </select>
     <select id="selectByCondition" resultMap="BaseResultMap"
             
parameterType="org.apache.inlong.manager.pojo.group.InlongGroupPageRequest">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_group
         <where>
-            tenant = #{tenant,jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
             and is_deleted = 0
             <if test="keyword != null and keyword != ''">
                 and (inlong_group_id like CONCAT('%',#{keyword},'%') or name 
like CONCAT('%',#{keyword},'%'))
@@ -290,12 +314,15 @@
     </select>
     <select id="selectBriefList" 
parameterType="org.apache.inlong.manager.pojo.group.InlongGroupPageRequest"
             
resultType="org.apache.inlong.manager.pojo.group.InlongGroupBriefInfo">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select id, inlong_group_id, name, mq_type, mq_resource, 
inlong_cluster_tag, ext_params,
                in_charges, status, creator, modifier, create_time, modify_time
         from inlong_group
         <where>
-            is_deleted = 0
-            and tenant = #{tenant,jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+            tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
             <if test="mqType != null and mqType != ''">
                 and mq_type = #{mqType, jdbcType=VARCHAR}
             </if>
@@ -317,12 +344,15 @@
         </where>
     </select>
     <select id="selectByTopicRequest" 
resultType="org.apache.inlong.manager.dao.entity.InlongGroupEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_group
         <where>
-            is_deleted = 0
-            and tenant = #{tenant,jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+            tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
             <if test="groupIdList != null and groupIdList.size() > 0">
                 and inlong_group_id in
                 <foreach collection="groupIdList" item="inlongGroupId" 
index="index" open="(" close=")" separator=",">
@@ -332,34 +362,51 @@
         </where>
     </select>
     <select id="selectByClusterTag" 
resultType="org.apache.inlong.manager.dao.entity.InlongGroupEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
         <include refid="Base_Column_List"/>
         from inlong_group
-        where is_deleted = 0
-        and tenant = #{tenant,jdbcType=VARCHAR}
-        and inlong_cluster_tag = #{inlongClusterTag, jdbcType=VARCHAR}
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            and inlong_cluster_tag = #{inlongClusterTag, jdbcType=VARCHAR}
+        </where>
         limit 10
     </select>
     <select id="selectAllGroups" 
resultType="org.apache.inlong.manager.pojo.sort.standalone.SortSourceGroupInfo">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select inlong_group_id    as groupId,
                inlong_cluster_tag as clusterTag,
                mq_resource        as mqResource,
                ext_params         as extParams,
                mq_type            as mqType
         from inlong_group
-        where is_deleted = 0
+        <where>
+            <if test="_isInlongService == false">
+               tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+        </where>
     </select>
     <select id="selectDeletedGroupIds" resultType="java.lang.String">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select inlong_group_id
         from inlong_group
-        where modify_time &lt;= #{timeBefore, jdbcType=TIMESTAMP}
-        and tenant = #{tenant,jdbcType=VARCHAR}
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and modify_time &lt;= #{timeBefore, jdbcType=TIMESTAMP}
+        </where>
         group by inlong_group_id
         having min(is_deleted) > 0
         limit #{limit, jdbcType=INTEGER}
     </select>
 
     <update id="updateByPrimaryKey" 
parameterType="org.apache.inlong.manager.dao.entity.InlongGroupEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update inlong_group
         set inlong_group_id        = #{inlongGroupId,jdbcType=VARCHAR},
             name                   = #{name,jdbcType=VARCHAR},
@@ -385,11 +432,16 @@
             is_deleted             = #{isDeleted,jdbcType=INTEGER},
             modifier               = #{modifier,jdbcType=VARCHAR},
             version                = #{version,jdbcType=INTEGER} + 1
-        where id = #{id,jdbcType=INTEGER}
-          and tenant = #{tenant,jdbcType=VARCHAR}
-          and version = #{version,jdbcType=INTEGER}
+        <where>
+            <if test="_isInlongService == false">
+                tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and id = #{id,jdbcType=INTEGER}
+            and version = #{version,jdbcType=INTEGER}
+        </where>
     </update>
     <update id="updateByIdentifierSelective" 
parameterType="org.apache.inlong.manager.dao.entity.InlongGroupEntity">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update inlong_group
         <set>
             <if test="name != null">
@@ -454,34 +506,53 @@
             </if>
             version = #{version,jdbcType=INTEGER} + 1
         </set>
-        where inlong_group_id = #{inlongGroupId, jdbcType=VARCHAR}
-        and tenant = #{tenant,jdbcType=VARCHAR}
-        and is_deleted = 0
-        and version = #{version, jdbcType=INTEGER}
+        <where>
+            inlong_group_id = #{inlongGroupId, jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+            and version = #{version, jdbcType=INTEGER}
+        </where>
     </update>
     <update id="updateStatus">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         update inlong_group
         set previous_status = status,
             status          = #{status, jdbcType=INTEGER},
             modifier        = #{modifier, jdbcType=VARCHAR}
-        where inlong_group_id = #{groupId, jdbcType=VARCHAR}
-          and tenant = #{tenant,jdbcType=VARCHAR}
-          and is_deleted = 0
+        <where>
+            inlong_group_id = #{groupId, jdbcType=VARCHAR}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+            and is_deleted = 0
+        </where>
     </update>
 
     <delete id="deleteByPrimaryKey">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         delete
         from inlong_group
-        where id = #{id,jdbcType=INTEGER}
-        and tenant = #{tenant,jdbcType=VARCHAR}
+        <where>
+            id = #{id,jdbcType=INTEGER}
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+        </where>
     </delete>
     <delete id="deleteByInlongGroupIds">
+        <bind name="_isInlongService" value="LoginUser.InlongService"/>
         delete
         from inlong_group
-        where inlong_group_id in
-        <foreach item="item" index="index" collection="groupIdList" open="(" 
close=")" separator=",">
-            #{item}
-        </foreach>
-        and tenant = #{tenant,jdbcType=VARCHAR}
+        <where>
+            inlong_group_id in
+            <foreach item="item" index="index" collection="groupIdList" 
open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+            <if test="_isInlongService == false">
+                and tenant = #{tenant,jdbcType=VARCHAR}
+            </if>
+        </where>
     </delete>
 </mapper>
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/user/UserRoleCode.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/user/UserRoleCode.java
index e591fab23e..e6fdd545af 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/user/UserRoleCode.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/user/UserRoleCode.java
@@ -70,4 +70,9 @@ public class UserRoleCode {
      */
     public static final String INLONG_OPERATOR = "INLONG_OPERATOR";
 
+    /**
+     * The requests from Inlong Service do not need to filter by tenant
+     */
+    public static final String INLONG_SERVICE = "INLONG_SERVICE";
+
 }
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/SortSourceServiceImpl.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/SortSourceServiceImpl.java
index 924a3815a3..39edbe3c41 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/SortSourceServiceImpl.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/SortSourceServiceImpl.java
@@ -272,7 +272,7 @@ public class SortSourceServiceImpl implements 
SortSourceService {
                     task2Md5.put(taskName, md5);
                 } catch (Throwable t) {
                     LOGGER.warn("failed to parse sort source config of 
sortCluster={}, task={}",
-                            sortClusterName, taskName);
+                            sortClusterName, taskName, t);
                 }
             });
             newConfigMap.put(sortClusterName, task2Config);
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/tenant/InlongTenantServiceImpl.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/tenant/InlongTenantServiceImpl.java
index 746380c66a..018327d11f 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/tenant/InlongTenantServiceImpl.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/tenant/InlongTenantServiceImpl.java
@@ -111,12 +111,12 @@ public class InlongTenantServiceImpl implements 
InlongTenantService {
 
     @Override
     public PageResult<InlongTenantInfo> 
listByCondition(InlongTenantPageRequest request, UserInfo userInfo) {
-        PageHelper.startPage(request.getPageNum(), request.getPageSize());
-
         if (request.getListByLoginUser()) {
             setTargetTenantList(request, userInfo);
         }
 
+        PageHelper.startPage(request.getPageNum(), request.getPageSize());
+
         Page<InlongTenantEntity> entityPage = 
inlongTenantEntityMapper.selectByCondition(request);
 
         List<InlongTenantInfo> tenantList = 
CommonBeanUtils.copyListProperties(entityPage, InlongTenantInfo::new);
@@ -163,16 +163,18 @@ public class InlongTenantServiceImpl implements 
InlongTenantService {
     }
 
     private void setTargetTenantList(InlongTenantPageRequest request, UserInfo 
userInfo) {
-        request.setKeyword(null);
         if (isInlongRoles(userInfo)) {
+            // for inlong roles, they can get all tenant info.
             request.setTenantList(null);
             return;
         }
 
         List<String> tenants = 
tenantRoleService.listTenantByUsername(userInfo.getName());
         if (CollectionUtils.isEmpty(tenants)) {
-            request.setTenantList(null);
-            return;
+            String errMsg = String.format("user=[%s] doesn't belong to any 
tenant, please contact administrator " +
+                    "and get one tenant at least", userInfo.getName());
+            log.error(errMsg);
+            throw new BusinessException(errMsg);
         }
         request.setTenantList(tenants);
     }
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/user/TenantRoleServiceImpl.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/user/TenantRoleServiceImpl.java
index 618d014cec..d25d943113 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/user/TenantRoleServiceImpl.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/user/TenantRoleServiceImpl.java
@@ -98,7 +98,7 @@ public class TenantRoleServiceImpl implements 
TenantRoleService {
         if (rowCount != InlongConstants.AFFECTED_ONE_ROW) {
             throw new BusinessException(ErrorCodeEnum.CONFIG_EXPIRED,
                     String.format(
-                            "failure to update tenant user role with id=%d, 
request version=%d, updated row=%d",
+                            "fail to update tenant user role with id=%d, 
request version=%d, updated row=%d",
                             request.getId(), request.getVersion(), rowCount));
         }
         return true;
diff --git 
a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/sort/SortServiceImplTest.java
 
b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/sort/SortServiceImplTest.java
index 7fad5b6677..993ffd5734 100644
--- 
a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/sort/SortServiceImplTest.java
+++ 
b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/sort/SortServiceImplTest.java
@@ -39,6 +39,8 @@ import org.apache.inlong.manager.pojo.sink.SinkRequest;
 import org.apache.inlong.manager.pojo.sink.hive.HiveSinkRequest;
 import org.apache.inlong.manager.pojo.stream.InlongStreamExtInfo;
 import org.apache.inlong.manager.pojo.stream.InlongStreamRequest;
+import org.apache.inlong.manager.pojo.user.LoginUserUtils;
+import org.apache.inlong.manager.pojo.user.UserInfo;
 import org.apache.inlong.manager.service.ServiceBaseTest;
 import org.apache.inlong.manager.service.cluster.InlongClusterService;
 import org.apache.inlong.manager.service.core.SortService;
@@ -49,6 +51,7 @@ import 
org.apache.inlong.manager.service.stream.InlongStreamService;
 
 import org.json.JSONObject;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
 import org.junit.jupiter.api.Order;
@@ -60,8 +63,12 @@ import 
org.springframework.transaction.annotation.Transactional;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+
+import static org.apache.inlong.manager.pojo.user.UserRoleCode.INLONG_SERVICE;
 
 /**
  * Sort service test for {@link SortService}
@@ -106,6 +113,17 @@ public class SortServiceImplTest extends ServiceBaseTest {
     @Autowired
     private StreamSinkService streamSinkService;
 
+    @BeforeAll
+    public static void login() {
+        UserInfo userInfo = new UserInfo();
+        userInfo.setTenant(PUBLIC_TENANT);
+        userInfo.setName(GLOBAL_OPERATOR);
+        Set<String> roles = new HashSet<>();
+        roles.add(INLONG_SERVICE);
+        userInfo.setRoles(roles);
+        LoginUserUtils.setUserLoginInfo(userInfo);
+    }
+
     @Test
     @Order(1)
     @Transactional
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/auth/tenant/TenantAuthenticatingRealm.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/auth/tenant/TenantAuthenticatingRealm.java
index 6afeaaa442..d02d0b41f7 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/auth/tenant/TenantAuthenticatingRealm.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/auth/tenant/TenantAuthenticatingRealm.java
@@ -29,6 +29,7 @@ import 
org.apache.inlong.manager.service.user.TenantRoleService;
 import org.apache.inlong.manager.service.user.UserService;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.AuthenticationInfo;
 import org.apache.shiro.authc.AuthenticationToken;
@@ -122,10 +123,9 @@ public class TenantAuthenticatingRealm extends 
AuthenticatingRealm {
             }
         };
 
-        if (userInfo.getRoles() == null) {
-            userInfo.setRoles(roleSet);
-        } else {
-            userInfo.getRoles().addAll(roleSet);
+        if (CollectionUtils.isEmpty(userInfo.getRoles())) {
+            roleSet.addAll(userInfo.getRoles());
         }
+        userInfo.setRoles(roleSet);
     }
 }

Reply via email to