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 4a01e5da23 [INLONG-8663][Manager] Add tenant related OpenAPI (#8665)
4a01e5da23 is described below

commit 4a01e5da23a4fab498fdea95f36d4f6c28c3d6eb
Author: castor <[email protected]>
AuthorDate: Thu Aug 10 16:58:53 2023 +0800

    [INLONG-8663][Manager] Add tenant related OpenAPI (#8665)
    
    Co-authored-by: castorqin <[email protected]>
---
 .../inlong/manager/pojo/user/LoginUserUtils.java   | 11 +++
 .../web/controller/InlongClusterController.java    |  6 +-
 .../openapi/OpenInLongClusterController.java       | 49 ++++++++++++
 .../openapi/OpenInlongTenantController.java        | 83 +++++++++++++++++++
 .../openapi/OpenInlongTenantRoleController.java    | 92 ++++++++++++++++++++++
 5 files changed, 237 insertions(+), 4 deletions(-)

diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/user/LoginUserUtils.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/user/LoginUserUtils.java
index 92bf9e994f..689ee11d58 100644
--- 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/user/LoginUserUtils.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/user/LoginUserUtils.java
@@ -17,8 +17,13 @@
 
 package org.apache.inlong.manager.pojo.user;
 
+import org.apache.inlong.manager.common.enums.InlongUserTypeEnum;
+import org.apache.inlong.manager.common.enums.TenantUserTypeEnum;
+
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.Set;
+
 /**
  * User info for login
  */
@@ -34,6 +39,12 @@ public class LoginUserUtils {
         return LOGIN_USER_DETAIL_TL.get();
     }
 
+    public static boolean isInlongAdminOrTenantAdmin() {
+        Set<String> roles = LOGIN_USER_DETAIL_TL.get().getRoles();
+        return roles.contains(TenantUserTypeEnum.TENANT_ADMIN.name()) || 
roles.contains(
+                InlongUserTypeEnum.INLONG_ADMIN.name());
+    }
+
     public static void setUserLoginInfo(UserInfo userInfo) {
         LOGIN_USER_DETAIL_TL.set(userInfo);
         log.debug("user login: {}", userInfo.getName());
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 947b249d7c..1ce4ee1dd0 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
@@ -18,7 +18,6 @@
 package org.apache.inlong.manager.web.controller;
 
 import org.apache.inlong.manager.common.enums.OperationType;
-import org.apache.inlong.manager.common.enums.TenantUserTypeEnum;
 import org.apache.inlong.manager.common.validation.SaveValidation;
 import org.apache.inlong.manager.common.validation.UpdateByIdValidation;
 import org.apache.inlong.manager.common.validation.UpdateByKeyValidation;
@@ -95,8 +94,7 @@ public class InlongClusterController {
     @ApiOperation(value = "List cluster tags")
     public Response<PageResult<ClusterTagResponse>> listTag(@RequestBody 
ClusterTagPageRequest request) {
         request.setCurrentUser(LoginUserUtils.getLoginUser().getName());
-        request.setIsAdminRole(
-                
LoginUserUtils.getLoginUser().getRoles().contains(TenantUserTypeEnum.TENANT_ADMIN.name()));
+        request.setIsAdminRole(LoginUserUtils.isInlongAdminOrTenantAdmin());
         return Response.success(clusterService.listTag(request));
     }
 
@@ -179,7 +177,7 @@ public class InlongClusterController {
     public Response<PageResult<ClusterInfo>> list(@RequestBody 
ClusterPageRequest request) {
         request.setCurrentUser(LoginUserUtils.getLoginUser().getName());
         request.setIsAdminRole(
-                
LoginUserUtils.getLoginUser().getRoles().contains(TenantUserTypeEnum.TENANT_ADMIN.name()));
+                LoginUserUtils.isInlongAdminOrTenantAdmin());
         return Response.success(clusterService.list(request));
     }
 
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java
index e2ca806b20..f72e66a416 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java
@@ -19,6 +19,7 @@ package org.apache.inlong.manager.web.controller.openapi;
 
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
 import org.apache.inlong.manager.common.enums.OperationType;
+import org.apache.inlong.manager.common.enums.TenantUserTypeEnum;
 import org.apache.inlong.manager.common.util.Preconditions;
 import org.apache.inlong.manager.common.validation.SaveValidation;
 import org.apache.inlong.manager.common.validation.UpdateByIdValidation;
@@ -32,8 +33,13 @@ import org.apache.inlong.manager.pojo.cluster.ClusterRequest;
 import org.apache.inlong.manager.pojo.cluster.ClusterTagPageRequest;
 import org.apache.inlong.manager.pojo.cluster.ClusterTagRequest;
 import org.apache.inlong.manager.pojo.cluster.ClusterTagResponse;
+import org.apache.inlong.manager.pojo.cluster.TenantClusterTagInfo;
+import org.apache.inlong.manager.pojo.cluster.TenantClusterTagPageRequest;
+import org.apache.inlong.manager.pojo.cluster.TenantClusterTagRequest;
+import org.apache.inlong.manager.pojo.common.PageResult;
 import org.apache.inlong.manager.pojo.common.Response;
 import org.apache.inlong.manager.pojo.user.LoginUserUtils;
+import org.apache.inlong.manager.pojo.user.UserRoleCode;
 import org.apache.inlong.manager.service.cluster.InlongClusterService;
 import org.apache.inlong.manager.service.operationlog.OperationLog;
 
@@ -41,6 +47,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresRoles;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.DeleteMapping;
@@ -80,6 +87,8 @@ public class OpenInLongClusterController {
     public Response<List<ClusterTagResponse>> listTag(@RequestBody 
ClusterTagPageRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
         Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), 
ErrorCodeEnum.LOGIN_USER_EMPTY);
+        request.setIsAdminRole(
+                
LoginUserUtils.getLoginUser().getRoles().contains(TenantUserTypeEnum.TENANT_ADMIN.name()));
         return Response.success(clusterService.listTag(request, 
LoginUserUtils.getLoginUser()));
     }
 
@@ -125,6 +134,8 @@ public class OpenInLongClusterController {
     public Response<List<ClusterInfo>> list(@RequestBody ClusterPageRequest 
request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
         Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), 
ErrorCodeEnum.LOGIN_USER_EMPTY);
+        request.setIsAdminRole(
+                
LoginUserUtils.getLoginUser().getRoles().contains(TenantUserTypeEnum.TENANT_ADMIN.name()));
         return Response.success(clusterService.list(request, 
LoginUserUtils.getLoginUser()));
     }
 
@@ -227,4 +238,42 @@ public class OpenInLongClusterController {
         return Response.success(clusterService.deleteNode(id, 
LoginUserUtils.getLoginUser()));
     }
 
+    @PostMapping(value = "/cluster/tenant/tag/save")
+    @ApiOperation(value = "Save tenant cluster tag")
+    @OperationLog(operation = OperationType.CREATE)
+    @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
+    public Response<Integer> saveTenantTag(
+            @Validated(SaveValidation.class) @RequestBody 
TenantClusterTagRequest request) {
+        String currentUser = LoginUserUtils.getLoginUser().getName();
+        return Response.success(clusterService.saveTenantTag(request, 
currentUser));
+    }
+
+    @PostMapping(value = "/cluster/tenant/tag/list")
+    @ApiOperation(value = "List tenant cluster tags")
+    public Response<PageResult<TenantClusterTagInfo>> 
listTenantTag(@RequestBody TenantClusterTagPageRequest request) {
+        return Response.success(clusterService.listTenantTag(request));
+    }
+
+    @PostMapping(value = "/cluster/tag/listTagByTenantRole")
+    @ApiOperation(value = "List cluster tags by tenant condition")
+    public Response<PageResult<ClusterTagResponse>> listTagByTenantRole(
+            @RequestBody TenantClusterTagPageRequest request) {
+        return Response.success(clusterService.listTagByTenantRole(request));
+    }
+
+    @PostMapping(value = "/cluster/listByTenantRole")
+    @ApiOperation(value = "List cluster by tenant condition")
+    public Response<PageResult<ClusterInfo>> listByTenantRole(
+            @RequestBody ClusterPageRequest request) {
+        return Response.success(clusterService.listByTenantRole(request));
+    }
+
+    @DeleteMapping(value = "/cluster/tenant/tag/delete/{id}")
+    @ApiOperation(value = "Delete tenant cluster tag by id")
+    @OperationLog(operation = OperationType.DELETE)
+    @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = 
Integer.class, required = true)
+    @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
+    public Response<Boolean> deleteTenantTag(@PathVariable Integer id) {
+        return Response.success(clusterService.deleteTenantTag(id, 
LoginUserUtils.getLoginUser().getName()));
+    }
 }
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java
new file mode 100644
index 0000000000..6f9bd2a79f
--- /dev/null
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.web.controller.openapi;
+
+import org.apache.inlong.manager.common.enums.OperationType;
+import org.apache.inlong.manager.common.validation.UpdateByIdValidation;
+import org.apache.inlong.manager.pojo.common.PageResult;
+import org.apache.inlong.manager.pojo.common.Response;
+import org.apache.inlong.manager.pojo.tenant.InlongTenantInfo;
+import org.apache.inlong.manager.pojo.tenant.InlongTenantPageRequest;
+import org.apache.inlong.manager.pojo.tenant.InlongTenantRequest;
+import org.apache.inlong.manager.pojo.user.LoginUserUtils;
+import org.apache.inlong.manager.service.operationlog.OperationLog;
+import org.apache.inlong.manager.service.tenant.InlongTenantService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/openapi")
+@Api(tags = "Open-InlongTenant-API")
+public class OpenInlongTenantController {
+
+    @Autowired
+    private InlongTenantService tenantService;
+
+    @RequestMapping(value = "/tenant/get/{name}", method = RequestMethod.GET)
+    @ApiOperation(value = "Get inlong tenant by name")
+    @ApiImplicitParam(name = "name", dataTypeClass = String.class, required = 
true)
+    public Response<InlongTenantInfo> get(@PathVariable String name) {
+        return Response.success(tenantService.getByName(name));
+    }
+
+    @RequestMapping(value = "/tenant/save", method = RequestMethod.POST)
+    @OperationLog(operation = OperationType.CREATE)
+    @ApiOperation(value = "Save inlong tenant")
+    public Response<Integer> save(@Validated @RequestBody InlongTenantRequest 
request) {
+        return Response.success(tenantService.save(request));
+    }
+
+    @RequestMapping(value = "/tenant/list", method = RequestMethod.POST)
+    @ApiOperation(value = "List tenant by paginating")
+    public Response<PageResult<InlongTenantInfo>> listByCondition(@RequestBody 
InlongTenantPageRequest request) {
+        return Response.success(tenantService.listByCondition(request, 
LoginUserUtils.getLoginUser()));
+    }
+
+    @RequestMapping(value = "/tenant/update", method = RequestMethod.POST)
+    @OperationLog(operation = OperationType.UPDATE)
+    @ApiOperation(value = "Update inlong tenant")
+    public Response<Boolean> update(@Validated(UpdateByIdValidation.class) 
@RequestBody InlongTenantRequest request) {
+        return Response.success(tenantService.update(request));
+    }
+
+    @RequestMapping(value = "/tenant/delete/{name}", method = 
RequestMethod.GET)
+    @ApiOperation(value = "Delete inlong tenant by name")
+    @ApiImplicitParam(name = "name", dataTypeClass = String.class, required = 
true)
+    public Response<Boolean> delete(@PathVariable String name) {
+        return Response.success(tenantService.delete(name));
+    }
+}
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java
new file mode 100644
index 0000000000..37f478cc3d
--- /dev/null
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.web.controller.openapi;
+
+import org.apache.inlong.manager.common.enums.OperationType;
+import org.apache.inlong.manager.pojo.common.PageResult;
+import org.apache.inlong.manager.pojo.common.Response;
+import org.apache.inlong.manager.pojo.user.LoginUserUtils;
+import org.apache.inlong.manager.pojo.user.TenantRoleInfo;
+import org.apache.inlong.manager.pojo.user.TenantRolePageRequest;
+import org.apache.inlong.manager.pojo.user.TenantRoleRequest;
+import org.apache.inlong.manager.pojo.user.UserRoleCode;
+import org.apache.inlong.manager.service.operationlog.OperationLog;
+import org.apache.inlong.manager.service.user.TenantRoleService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresRoles;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/openapi")
+@Api(tags = "Open-InlongTenantRole-API")
+public class OpenInlongTenantRoleController {
+
+    @Autowired
+    private TenantRoleService tenantRoleService;
+
+    @RequestMapping(value = "/role/tenant/get/{id}", method = 
RequestMethod.GET)
+    @ApiOperation(value = "Get tenant role by ID")
+    @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = 
true)
+    @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.TENANT_OPERATOR,
+            UserRoleCode.INLONG_ADMIN})
+    public Response<TenantRoleInfo> get(@PathVariable int id) {
+        return Response.success(tenantRoleService.get(id));
+    }
+
+    @RequestMapping(value = "/role/tenant/save", method = RequestMethod.POST)
+    @OperationLog(operation = OperationType.CREATE)
+    @ApiOperation(value = "Save tenant role")
+    @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
+    public Response<Integer> save(@Validated @RequestBody TenantRoleRequest 
request) {
+        String operator = LoginUserUtils.getLoginUser().getName();
+        return Response.success(tenantRoleService.save(request, operator));
+    }
+
+    @RequestMapping(value = "/role/tenant/update", method = RequestMethod.POST)
+    @OperationLog(operation = OperationType.CREATE)
+    @ApiOperation(value = "Update tenant role")
+    @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
+    public Response<Boolean> update(@Validated @RequestBody TenantRoleRequest 
request) {
+        String operator = LoginUserUtils.getLoginUser().getName();
+        return Response.success(tenantRoleService.update(request, operator));
+    }
+
+    @RequestMapping(value = "/role/tenant/list", method = RequestMethod.POST)
+    @ApiOperation(value = "List tenant roles by paginating")
+    public Response<PageResult<TenantRoleInfo>> listByCondition(@RequestBody 
TenantRolePageRequest request) {
+        return Response.success(tenantRoleService.listByCondition(request));
+    }
+
+    @RequestMapping(value = "/role/tenant/delete/{id}", method = 
RequestMethod.DELETE)
+    @ApiOperation(value = "Delete tenant role by ID")
+    @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = 
true)
+    @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
+    public Response<Boolean> delete(@PathVariable int id) {
+        return Response.success(tenantRoleService.delete(id));
+    }
+}

Reply via email to