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 a39e03cc5 [INLONG-8108][Manager] WorkflowApprover API Permissions 
Optimization (#8109)
a39e03cc5 is described below

commit a39e03cc5d1bde2ad9fd3ed583866430be7378aa
Author: Hao <[email protected]>
AuthorDate: Tue May 30 11:15:54 2023 +0800

    [INLONG-8108][Manager] WorkflowApprover API Permissions Optimization (#8109)
---
 .../inlong/manager/service/core/WorkflowApproverService.java   |  3 ++-
 .../manager/service/core/impl/WorkflowApproverServiceImpl.java | 10 +++++++++-
 .../service/workflow/WorkflowApproverServiceImplTest.java      |  2 +-
 .../manager/web/controller/WorkflowApproverController.java     |  7 ++++++-
 4 files changed, 18 insertions(+), 4 deletions(-)

diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/WorkflowApproverService.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/WorkflowApproverService.java
index 8c99be293..7473b23ad 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/WorkflowApproverService.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/WorkflowApproverService.java
@@ -41,9 +41,10 @@ public interface WorkflowApproverService {
      * Get workflow approver by ID
      *
      * @param id approver id
+     * @param operator operator name
      * @return approver info
      */
-    ApproverResponse get(Integer id);
+    ApproverResponse get(Integer id, String operator);
 
     /**
      * Get process approver by the process name and task name.
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/WorkflowApproverServiceImpl.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/WorkflowApproverServiceImpl.java
index 5d53367ff..874b0efb1 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/WorkflowApproverServiceImpl.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/WorkflowApproverServiceImpl.java
@@ -29,6 +29,7 @@ import 
org.apache.inlong.manager.pojo.workflow.ApproverPageRequest;
 import org.apache.inlong.manager.pojo.workflow.ApproverRequest;
 import org.apache.inlong.manager.pojo.workflow.ApproverResponse;
 import org.apache.inlong.manager.service.core.WorkflowApproverService;
+import org.apache.inlong.manager.service.user.UserService;
 import org.apache.inlong.manager.workflow.core.ProcessDefinitionService;
 import org.apache.inlong.manager.workflow.definition.UserTask;
 import org.apache.inlong.manager.workflow.definition.WorkflowProcess;
@@ -60,6 +61,8 @@ public class WorkflowApproverServiceImpl implements 
WorkflowApproverService {
     private WorkflowApproverEntityMapper approverMapper;
     @Autowired
     private ProcessDefinitionService processDefinitionService;
+    @Autowired
+    private UserService userService;
 
     @Override
     public Integer save(ApproverRequest request, String operator) {
@@ -87,13 +90,18 @@ public class WorkflowApproverServiceImpl implements 
WorkflowApproverService {
     }
 
     @Override
-    public ApproverResponse get(Integer id) {
+    public ApproverResponse get(Integer id, String operator) {
         Preconditions.expectNotNull(id, "approver id cannot be null");
+
         WorkflowApproverEntity approverEntity = approverMapper.selectById(id);
         if (approverEntity == null) {
             LOGGER.error("workflow approver not found by id={}", id);
             throw new 
BusinessException(ErrorCodeEnum.WORKFLOW_APPROVER_NOT_FOUND);
         }
+
+        userService.checkUser(approverEntity.getApprovers(), operator,
+                "Current user does not have permission to get this workflow 
approver info");
+
         return CommonBeanUtils.copyProperties(approverEntity, 
ApproverResponse::new);
     }
 
diff --git 
a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/workflow/WorkflowApproverServiceImplTest.java
 
b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/workflow/WorkflowApproverServiceImplTest.java
index 76b4a1b63..5182e628b 100644
--- 
a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/workflow/WorkflowApproverServiceImplTest.java
+++ 
b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/workflow/WorkflowApproverServiceImplTest.java
@@ -43,7 +43,7 @@ public class WorkflowApproverServiceImplTest extends 
ServiceBaseTest {
         Assertions.assertTrue(approverList.getList().size() > 0);
 
         Integer id = approverList.getList().get(0).getId();
-        ApproverResponse approverResponse = workflowApproverService.get(id);
+        ApproverResponse approverResponse = workflowApproverService.get(id, 
"admin");
         Assertions.assertEquals(id, approverResponse.getId());
     }
 
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java
index 848b0aedc..29793917a 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java
@@ -21,6 +21,7 @@ import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.enums.UserTypeEnum;
 import org.apache.inlong.manager.pojo.common.PageResult;
 import org.apache.inlong.manager.pojo.common.Response;
+import org.apache.inlong.manager.pojo.user.UserRoleCode;
 import org.apache.inlong.manager.pojo.workflow.ApproverPageRequest;
 import org.apache.inlong.manager.pojo.workflow.ApproverRequest;
 import org.apache.inlong.manager.pojo.workflow.ApproverResponse;
@@ -31,6 +32,7 @@ import org.apache.inlong.manager.service.user.LoginUserUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresRoles;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -54,6 +56,7 @@ public class WorkflowApproverController {
     @PostMapping("/workflow/approver/save")
     @OperationLog(operation = OperationType.CREATE)
     @ApiOperation(value = "Save approver info")
+    @RequiresRoles(value = UserRoleCode.ADMIN)
     public Response<Integer> save(@RequestBody ApproverRequest config) {
         return Response.success(workflowApproverService.save(config, 
LoginUserUtils.getLoginUser().getName()));
     }
@@ -62,7 +65,7 @@ public class WorkflowApproverController {
     @ApiOperation(value = "Get approver by ID")
     @ApiImplicitParam(name = "id", value = "Workflow approver ID", 
dataTypeClass = Integer.class, required = true)
     public Response<ApproverResponse> get(@PathVariable Integer id) {
-        return Response.success(workflowApproverService.get(id));
+        return Response.success(workflowApproverService.get(id, 
LoginUserUtils.getLoginUser().getName()));
     }
 
     @GetMapping("/workflow/approver/list")
@@ -76,6 +79,7 @@ public class WorkflowApproverController {
     @PostMapping("/workflow/approver/update")
     @OperationLog(operation = OperationType.UPDATE)
     @ApiOperation(value = "Update approver info")
+    @RequiresRoles(value = UserRoleCode.ADMIN)
     public Response<Integer> update(@RequestBody ApproverRequest request) {
         return Response.success(workflowApproverService.update(request, 
LoginUserUtils.getLoginUser().getName()));
     }
@@ -84,6 +88,7 @@ public class WorkflowApproverController {
     @OperationLog(operation = OperationType.DELETE)
     @ApiOperation(value = "Delete approver by ID")
     @ApiImplicitParam(name = "id", value = "Workflow approver ID", 
dataTypeClass = Integer.class, required = true)
+    @RequiresRoles(value = UserRoleCode.ADMIN)
     public Response<Boolean> delete(@PathVariable Integer id) {
         workflowApproverService.delete(id, 
LoginUserUtils.getLoginUser().getName());
         return Response.success(true);

Reply via email to