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 0fa68dfb76 [INLONG-8378][Manager] InlongClusterTag support 
multi-tenancy (#8379)
0fa68dfb76 is described below

commit 0fa68dfb764747ece0861b3e83f49f558435159b
Author: vernedeng <[email protected]>
AuthorDate: Fri Jun 30 12:48:48 2023 +0800

    [INLONG-8378][Manager] InlongClusterTag support multi-tenancy (#8379)
---
 .../manager/dao/entity/InlongClusterTagEntity.java |  1 +
 .../dao/mapper/InlongClusterTagEntityMapper.java   |  2 ++
 .../mappers/InlongClusterTagEntityMapper.xml       | 31 +++++++++++-----------
 .../pojo/cluster/ClusterTagPageRequest.java        |  3 +++
 .../manager/pojo/cluster/ClusterTagRequest.java    |  4 +++
 .../main/resources/h2/apache_inlong_manager.sql    |  1 +
 .../manager-web/sql/apache_inlong_manager.sql      |  1 +
 inlong-manager/manager-web/sql/changes-1.8.0.sql   |  5 ++++
 .../web/controller/InlongClusterController.java    |  5 ++--
 9 files changed, 36 insertions(+), 17 deletions(-)

diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/InlongClusterTagEntity.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/InlongClusterTagEntity.java
index a92390cd9a..55afa3396d 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/InlongClusterTagEntity.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/InlongClusterTagEntity.java
@@ -33,6 +33,7 @@ public class InlongClusterTagEntity implements Serializable {
     private String clusterTag;
     private String extParams;
     private String description;
+    private String tenant;
     private String inCharges;
 
     private Integer status;
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongClusterTagEntityMapper.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongClusterTagEntityMapper.java
index 0afed687f0..44b7640650 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongClusterTagEntityMapper.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongClusterTagEntityMapper.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.InlongClusterTagEntity;
 import org.apache.inlong.manager.pojo.cluster.ClusterTagPageRequest;
 
@@ -25,6 +26,7 @@ import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
+@MultiTenantQuery
 @Repository
 public interface InlongClusterTagEntityMapper {
 
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 45ba9be610..96160b856d 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterTagEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongClusterTagEntityMapper.xml
@@ -25,6 +25,7 @@
         <result column="cluster_tag" jdbcType="VARCHAR" property="clusterTag"/>
         <result column="ext_params" jdbcType="LONGVARCHAR" 
property="extParams"/>
         <result column="description" jdbcType="VARCHAR" 
property="description"/>
+        <result column="tenant" jdbcType="VARCHAR" property="tenant"/>
         <result column="in_charges" jdbcType="VARCHAR" property="inCharges"/>
         <result column="status" jdbcType="INTEGER" property="status"/>
         <result column="is_deleted" jdbcType="INTEGER" property="isDeleted"/>
@@ -35,31 +36,33 @@
         <result column="version" jdbcType="INTEGER" property="version"/>
     </resultMap>
     <sql id="Base_Column_List">
-        id, cluster_tag, ext_params, description, in_charges, status, 
is_deleted,
+        id, cluster_tag, ext_params, description, tenant, in_charges, status, 
is_deleted,
         creator, modifier, create_time, modify_time, version
     </sql>
 
     <insert id="insert" useGeneratedKeys="true" keyProperty="id"
             
parameterType="org.apache.inlong.manager.dao.entity.InlongClusterTagEntity">
         insert into inlong_cluster_tag (id, cluster_tag, ext_params,
-                                        description, in_charges,
+                                        description, tenant, in_charges,
                                         status, creator, modifier)
         values (#{id,jdbcType=INTEGER}, #{clusterTag,jdbcType=VARCHAR}, 
#{extParams,jdbcType=LONGVARCHAR},
-                #{description, jdbcType=VARCHAR}, 
#{inCharges,jdbcType=VARCHAR},
+                #{description, jdbcType=VARCHAR}, #{tenant,jdbcType=VARCHAR}, 
#{inCharges,jdbcType=VARCHAR},
                 #{status,jdbcType=INTEGER}, #{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 inlong_cluster_tag
-        where id = #{id,jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and id = #{id,jdbcType=INTEGER}
     </select>
     <select id="selectByTag" 
resultType="org.apache.inlong.manager.dao.entity.InlongClusterTagEntity">
         select
         <include refid="Base_Column_List"/>
         from inlong_cluster_tag
-        where cluster_tag = #{clusterTag, jdbcType=VARCHAR}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and cluster_tag = #{clusterTag, jdbcType=VARCHAR}
         and is_deleted = 0
     </select>
     <select id="selectByCondition"
@@ -69,12 +72,8 @@
         <include refid="Base_Column_List"/>
         from inlong_cluster_tag
         <where>
-            is_deleted = 0
-            <if test="isAdminRole == false">
-                and (
-                creator = #{currentUser, jdbcType=VARCHAR} or 
find_in_set(#{currentUser, jdbcType=VARCHAR}, in_charges)
-                )
-            </if>
+            tenant = #{tenant,jdbcType=VARCHAR}
+            and is_deleted = 0
             <if test="keyword != null and keyword != ''">
                 and cluster_tag like CONCAT('%', #{keyword}, '%')
             </if>
@@ -108,13 +107,15 @@
             </if>
             version     = #{version,jdbcType=INTEGER} + 1
         </set>
-        where id = #{id,jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+          and id = #{id,jdbcType=INTEGER}
           and version = #{version,jdbcType=INTEGER}
     </update>
 
-    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    <delete id="deleteByPrimaryKey">
         delete
         from inlong_cluster_tag
-        where id = #{id,jdbcType=INTEGER}
+        where tenant = #{tenant,jdbcType=VARCHAR}
+        and id = #{id,jdbcType=INTEGER}
     </delete>
 </mapper>
\ No newline at end of file
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/cluster/ClusterTagPageRequest.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/cluster/ClusterTagPageRequest.java
index de2fb00eaf..cdc704fa2d 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/cluster/ClusterTagPageRequest.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/cluster/ClusterTagPageRequest.java
@@ -44,6 +44,9 @@ public class ClusterTagPageRequest extends PageRequest {
     @ApiModelProperty(value = "Status")
     private Integer status;
 
+    @ApiModelProperty(value = "Inlong tenant of cluster tag", hidden = true)
+    private String tenant;
+
     @ApiModelProperty(value = "Current user", hidden = true)
     private String currentUser;
 
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/cluster/ClusterTagRequest.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/cluster/ClusterTagRequest.java
index a5ba5546ae..46ecbb2694 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/cluster/ClusterTagRequest.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/cluster/ClusterTagRequest.java
@@ -54,6 +54,10 @@ public class ClusterTagRequest {
     @Length(max = 256, message = "length must be less than or equal to 256")
     private String description;
 
+    @ApiModelProperty(value = "Inlong tenant of cluster tag", hidden = true)
+    @Length(max = 256, message = "length must be less than or equal to 256")
+    private String tenant;
+
     @ApiModelProperty(value = "Name of in charges, separated by commas")
     @Length(max = 512, message = "length must be less than or equal to 512")
     private String inCharges;
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 c8d6d268dc..62d4e2aee9 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
@@ -81,6 +81,7 @@ CREATE TABLE IF NOT EXISTS `inlong_cluster_tag`
     `cluster_tag` varchar(128) NOT NULL COMMENT 'Cluster tag',
     `ext_params`  mediumtext            DEFAULT NULL COMMENT 'Extended params, 
will be saved as JSON string',
     `description` varchar(256)          DEFAULT '' COMMENT 'Description of 
cluster tag',
+    `tenant`      varchar(256)          DEFAULT 'public' COMMENT 'Inlong 
tenant of the inlong cluster tag',
     `in_charges`  varchar(512) NOT NULL COMMENT 'Name of responsible person, 
separated by commas',
     `status`      int(4)                DEFAULT '0' COMMENT 'Cluster status',
     `is_deleted`  int(11)               DEFAULT '0' COMMENT 'Whether to 
delete, 0: not deleted, > 0: deleted',
diff --git a/inlong-manager/manager-web/sql/apache_inlong_manager.sql 
b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
index 22948d4e50..fe50aeee1c 100644
--- a/inlong-manager/manager-web/sql/apache_inlong_manager.sql
+++ b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
@@ -90,6 +90,7 @@ CREATE TABLE IF NOT EXISTS `inlong_cluster_tag`
     `cluster_tag` varchar(128) NOT NULL COMMENT 'Cluster tag',
     `ext_params`  mediumtext            DEFAULT NULL COMMENT 'Extended params, 
will be saved as JSON string',
     `description` varchar(256)          DEFAULT '' COMMENT 'Description of 
cluster tag',
+    `tenant`      varchar(256)          DEFAULT 'public' COMMENT 'Inlong 
tenant of the inlong cluster tag',
     `in_charges`  varchar(512) NOT NULL COMMENT 'Name of responsible person, 
separated by commas',
     `status`      int(4)                DEFAULT '0' COMMENT 'Cluster status',
     `is_deleted`  int(11)               DEFAULT '0' COMMENT 'Whether to 
delete, 0: not deleted, > 0: deleted',
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 6b4716df48..8742b0af20 100644
--- a/inlong-manager/manager-web/sql/changes-1.8.0.sql
+++ b/inlong-manager/manager-web/sql/changes-1.8.0.sql
@@ -95,7 +95,12 @@ ALTER TABLE `data_node`
 CREATE INDEX datanode_tenant_index
     ON data_node (`tenant`, `is_deleted`);
 
+-- To support multi-tenancy of cluster. Please see #8365
 ALTER TABLE `inlong_cluster`
     ADD `tenant` VARCHAR(256) DEFAULT 'public' NOT NULL comment 'Inlong tenant 
of cluster' after `heartbeat`;
 CREATE INDEX cluster_tenant_index
     ON inlong_cluster (`tenant`, `is_deleted`);
+
+-- To support multi-tenancy of cluster tag. Please see #8378
+ALTER TABLE `inlong_cluster_tag`
+    ADD `tenant` VARCHAR(256) DEFAULT 'public' NOT NULL comment 'Inlong tenant 
of inlong cluster tag' after `description`;
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java
index a279db5de4..6abdeef97c 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java
@@ -74,7 +74,7 @@ public class InlongClusterController {
     @PostMapping(value = "/cluster/tag/save")
     @ApiOperation(value = "Save cluster tag")
     @OperationLog(operation = OperationType.CREATE)
-    @RequiresRoles(value = UserRoleCode.TENANT_ADMIN)
+    @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
     public Response<Integer> saveTag(@Validated(SaveValidation.class) 
@RequestBody ClusterTagRequest request) {
         String currentUser = LoginUserUtils.getLoginUser().getName();
         return Response.success(clusterService.saveTag(request, currentUser));
@@ -100,6 +100,7 @@ public class InlongClusterController {
     @PostMapping(value = "/cluster/tag/update")
     @OperationLog(operation = OperationType.UPDATE)
     @ApiOperation(value = "Update cluster tag")
+    @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
     public Response<Boolean> updateTag(@Validated(UpdateValidation.class) 
@RequestBody ClusterTagRequest request) {
         String username = LoginUserUtils.getLoginUser().getName();
         return Response.success(clusterService.updateTag(request, username));
@@ -109,7 +110,7 @@ public class InlongClusterController {
     @ApiOperation(value = "Delete cluster tag by id")
     @OperationLog(operation = OperationType.DELETE)
     @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = 
Integer.class, required = true)
-    @RequiresRoles(value = UserRoleCode.TENANT_ADMIN)
+    @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
     public Response<Boolean> deleteTag(@PathVariable Integer id) {
         return Response.success(clusterService.deleteTag(id, 
LoginUserUtils.getLoginUser().getName()));
     }

Reply via email to