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);