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 643c790e02 [INLONG-10326][Manager] Support obtaining tenant 
information based on groupId (#10327)
643c790e02 is described below

commit 643c790e0215f2ab6ebb264178d32c0d338f0586
Author: fuweng11 <[email protected]>
AuthorDate: Tue Jun 4 15:57:08 2024 +0800

    [INLONG-10326][Manager] Support obtaining tenant information based on 
groupId (#10327)
---
 .../dao/mapper/InlongGroupEntityMapper.java        |  3 ++
 .../resources/mappers/InlongGroupEntityMapper.xml  |  9 ++++++
 .../manager/service/group/InlongGroupService.java  |  8 +++++
 .../service/group/InlongGroupServiceImpl.java      | 36 ++++++++++++++++++++++
 .../web/controller/InlongGroupController.java      |  7 +++++
 5 files changed, 63 insertions(+)

diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongGroupEntityMapper.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongGroupEntityMapper.java
index e6ac9b17a0..1c9984e284 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongGroupEntityMapper.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongGroupEntityMapper.java
@@ -47,6 +47,9 @@ public interface InlongGroupEntityMapper {
 
     InlongGroupEntity selectByGroupId(String groupId);
 
+    @MultiTenantQuery(with = false)
+    InlongGroupEntity selectByGroupIdWithoutTenant(String groupId);
+
     InlongGroupEntity selectByGroupIdForUpdate(String groupId);
 
     List<InlongGroupEntity> selectByCondition(InlongGroupPageRequest request);
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 24eb394265..0f8445f0a0 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
@@ -247,6 +247,15 @@
             </if>
         </where>
     </select>
+    <select id="selectByGroupIdWithoutTenant" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from inlong_group
+        <where>
+            inlong_group_id = #{groupId, jdbcType=VARCHAR}
+            and is_deleted = 0
+        </where>
+    </select>
     <select id="selectByGroupIdForUpdate" resultMap="BaseResultMap">
         <bind name="_isInlongService" value="LoginUser.InlongService"/>
         select
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupService.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupService.java
index c64cf3c629..e611917a1e 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupService.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupService.java
@@ -88,6 +88,14 @@ public interface InlongGroupService {
      */
     InlongGroupInfo get(String groupId);
 
+    /**
+     * Get inlong group tenant based on inlong group id
+     *
+     * @param groupId inlong group id
+     * @return tenant of inlong group
+     */
+    String getTenant(String groupId, String operator);
+
     /**
      * Get inlong group info based on inlong group id
      *
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupServiceImpl.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupServiceImpl.java
index 6bdda6fd45..62062bced3 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupServiceImpl.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupServiceImpl.java
@@ -36,12 +36,14 @@ import 
org.apache.inlong.manager.dao.entity.InlongGroupExtEntity;
 import org.apache.inlong.manager.dao.entity.InlongStreamExtEntity;
 import org.apache.inlong.manager.dao.entity.StreamSourceEntity;
 import org.apache.inlong.manager.dao.entity.TenantClusterTagEntity;
+import org.apache.inlong.manager.dao.entity.TenantUserRoleEntity;
 import org.apache.inlong.manager.dao.mapper.InlongClusterEntityMapper;
 import org.apache.inlong.manager.dao.mapper.InlongGroupEntityMapper;
 import org.apache.inlong.manager.dao.mapper.InlongGroupExtEntityMapper;
 import org.apache.inlong.manager.dao.mapper.InlongStreamExtEntityMapper;
 import org.apache.inlong.manager.dao.mapper.StreamSourceEntityMapper;
 import org.apache.inlong.manager.dao.mapper.TenantClusterTagEntityMapper;
+import org.apache.inlong.manager.dao.mapper.TenantUserRoleEntityMapper;
 import org.apache.inlong.manager.pojo.cluster.ClusterInfo;
 import org.apache.inlong.manager.pojo.common.BatchResult;
 import org.apache.inlong.manager.pojo.common.OrderFieldEnum;
@@ -64,6 +66,8 @@ import org.apache.inlong.manager.pojo.sort.FlinkSortConf;
 import org.apache.inlong.manager.pojo.sort.UserDefinedSortConf;
 import org.apache.inlong.manager.pojo.source.StreamSource;
 import org.apache.inlong.manager.pojo.stream.InlongStreamInfo;
+import org.apache.inlong.manager.pojo.tenant.InlongTenantInfo;
+import org.apache.inlong.manager.pojo.user.InlongRoleInfo;
 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.GroupResourceProcessForm;
@@ -72,6 +76,8 @@ import 
org.apache.inlong.manager.service.sink.StreamSinkService;
 import org.apache.inlong.manager.service.source.SourceOperatorFactory;
 import org.apache.inlong.manager.service.source.StreamSourceOperator;
 import org.apache.inlong.manager.service.stream.InlongStreamService;
+import org.apache.inlong.manager.service.tenant.InlongTenantService;
+import org.apache.inlong.manager.service.user.InlongRoleService;
 import org.apache.inlong.manager.service.workflow.WorkflowService;
 
 import com.fasterxml.jackson.core.type.TypeReference;
@@ -145,6 +151,12 @@ public class InlongGroupServiceImpl implements 
InlongGroupService {
     private InlongGroupOperatorFactory groupOperatorFactory;
     @Autowired
     private SourceOperatorFactory sourceOperatorFactory;
+    @Autowired
+    private InlongTenantService tenantService;
+    @Autowired
+    private InlongRoleService inlongRoleService;
+    @Autowired
+    private TenantUserRoleEntityMapper tenantUserRoleEntityMapper;
 
     /**
      * Check whether modification is supported under the current group status, 
and which fields can be modified.
@@ -293,6 +305,30 @@ public class InlongGroupServiceImpl implements 
InlongGroupService {
         return groupInfo;
     }
 
+    @Override
+    public String getTenant(String groupId, String operator) {
+        InlongGroupEntity groupEntity = 
groupMapper.selectByGroupIdWithoutTenant(groupId);
+        String tenant = groupEntity.getTenant();
+        if (Objects.equals(InlongConstants.DEFAULT_PULSAR_TENANT, tenant)) {
+            return tenant;
+        }
+        InlongTenantInfo tenantInfo = tenantService.getByName(tenant);
+        if (tenantInfo == null) {
+            String errMsg = String.format("tenant=[%s] not found", tenant);
+            LOGGER.error(errMsg);
+            throw new BusinessException(errMsg);
+        }
+
+        InlongRoleInfo inlongRoleInfo = 
inlongRoleService.getByUsername(operator);
+        TenantUserRoleEntity tenantRoleInfo = 
tenantUserRoleEntityMapper.selectByUsernameAndTenant(operator, tenant);
+        if (inlongRoleInfo == null && tenantRoleInfo == null) {
+            String errMsg = String.format("user=[%s] has no privilege for 
tenant=[%s]", operator, tenant);
+            LOGGER.error(errMsg);
+            throw new BusinessException(errMsg);
+        }
+        return tenant;
+    }
+
     @Override
     public InlongGroupCountResponse countGroupByUser(String operator, Integer 
inlongGroupMode) {
         InlongGroupCountResponse countVO = new InlongGroupCountResponse();
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
index da69535631..04d89d332c 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
@@ -101,6 +101,13 @@ public class InlongGroupController {
         return Response.success(groupService.get(groupId));
     }
 
+    @RequestMapping(value = "/group/getTenant/{groupId}", method = 
RequestMethod.GET)
+    @ApiOperation(value = "Get inlong group tenant")
+    @ApiImplicitParam(name = "groupId", value = "Inlong group id", 
dataTypeClass = String.class, required = true)
+    public Response<String> getTenant(@PathVariable String groupId) {
+        return Response.success(groupService.getTenant(groupId, 
LoginUserUtils.getLoginUser().getName()));
+    }
+
     @RequestMapping(value = "/group/countByStatus", method = RequestMethod.GET)
     @ApiOperation(value = "Count inlong group status for current user")
     @ApiImplicitParam(name = "inlongGroupMode", dataTypeClass = Integer.class, 
defaultValue = "0")

Reply via email to