From 1b3db8bbbca20d89de4cf099974c4cac911d6d0c Mon Sep 17 00:00:00 2001 From: WangXu10 Date: Wed, 18 Sep 2024 14:53:17 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E7=B3=BB=E7=BB=9F):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7=E7=BB=84=E5=A4=9A=E6=9D=A1?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【【系统】组织与项目中修改组织 一个成员的用户组,生成很多 多余操作日志】 https://www.tapd.cn/55049933/bugtrace/bugs/view/1155049933001046450 --- .../controller/ProjectMemberController.java | 5 +- .../project/service/ProjectMemberService.java | 14 ++--- .../controller/OrganizationController.java | 3 +- .../SystemOrganizationController.java | 3 +- .../system/service/OrganizationService.java | 52 +++++-------------- .../components/userDrawer.vue | 2 + 6 files changed, 29 insertions(+), 50 deletions(-) diff --git a/backend/services/project-management/src/main/java/io/metersphere/project/controller/ProjectMemberController.java b/backend/services/project-management/src/main/java/io/metersphere/project/controller/ProjectMemberController.java index 14ef5242e8..fbe4a8e9dd 100644 --- a/backend/services/project-management/src/main/java/io/metersphere/project/controller/ProjectMemberController.java +++ b/backend/services/project-management/src/main/java/io/metersphere/project/controller/ProjectMemberController.java @@ -12,6 +12,7 @@ import io.metersphere.system.dto.request.UserInviteRequest; import io.metersphere.system.dto.sdk.OptionDTO; import io.metersphere.system.dto.user.UserExtendDTO; import io.metersphere.system.dto.user.response.UserInviteResponse; +import io.metersphere.system.log.constants.OperationLogModule; import io.metersphere.system.security.CheckOwner; import io.metersphere.system.service.SimpleUserService; import io.metersphere.system.utils.PageUtils; @@ -89,7 +90,7 @@ public class ProjectMemberController { @RequiresPermissions(PermissionConstants.PROJECT_USER_UPDATE) @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") public void updateMember(@RequestBody ProjectMemberEditRequest request) { - projectMemberService.updateMember(request, SessionUtils.getUserId()); + projectMemberService.updateMember(request, SessionUtils.getUserId(), "/project/member/update", OperationLogModule.PROJECT_MANAGEMENT_PERMISSION_MEMBER); } @GetMapping("/remove/{projectId}/{userId}") @@ -131,6 +132,6 @@ public class ProjectMemberController { @RequiresPermissions(PermissionConstants.ORGANIZATION_PROJECT_MEMBER_UPDATE) @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") public void updateProjectMemberRole(@RequestBody ProjectMemberEditRequest request) { - projectMemberService.updateMember(request, SessionUtils.getUserId()); + projectMemberService.updateMember(request, SessionUtils.getUserId(), "/project/member/update-member", OperationLogModule.SETTING_ORGANIZATION_PROJECT); } } diff --git a/backend/services/project-management/src/main/java/io/metersphere/project/service/ProjectMemberService.java b/backend/services/project-management/src/main/java/io/metersphere/project/service/ProjectMemberService.java index 30e457de29..d10f8bc686 100644 --- a/backend/services/project-management/src/main/java/io/metersphere/project/service/ProjectMemberService.java +++ b/backend/services/project-management/src/main/java/io/metersphere/project/service/ProjectMemberService.java @@ -171,7 +171,7 @@ public class ProjectMemberService { * @param request 请求参数 * @param currentUserId 当前用户ID */ - public void updateMember(ProjectMemberEditRequest request, String currentUserId) { + public void updateMember(ProjectMemberEditRequest request, String currentUserId, String path, String module) { // 操作记录 List logs = new ArrayList<>(); // 项目不存在 @@ -214,7 +214,7 @@ public class ProjectMemberService { roleExample.createCriteria().andIdIn(oldRoleIds); oldRoles = userRoleMapper.selectByExample(roleExample); } - setLog(request.getProjectId(), request.getUserId(), currentUserId, OperationLogType.UPDATE.name(), "/project/member/update", HttpMethodConstants.POST.name(), oldRoles, newRoles, logs); + setLog(request.getProjectId(), request.getUserId(), currentUserId, OperationLogType.UPDATE.name(), path, HttpMethodConstants.POST.name(), oldRoles, newRoles, logs, module); operationLogService.batchAdd(logs); } @@ -242,7 +242,7 @@ public class ProjectMemberService { example.createCriteria().andSourceIdEqualTo(projectId).andUserIdEqualTo(userId); userRoleRelationMapper.deleteByExample(example); // 操作记录 - setLog(projectId, userId, currentUserId, OperationLogType.DELETE.name(), "/project/member/remove", HttpMethodConstants.GET.name(), null, null, logs); + setLog(projectId, userId, currentUserId, OperationLogType.DELETE.name(), "/project/member/remove", HttpMethodConstants.GET.name(), null, null, logs, OperationLogModule.PROJECT_MANAGEMENT_PERMISSION_MEMBER); operationLogService.batchAdd(logs); } @@ -323,7 +323,7 @@ public class ProjectMemberService { roleExample.createCriteria().andIdIn(roleIds); List userRoles = userRoleMapper.selectByExample(roleExample); // 追加了哪些用户组 - setLog(request.getProjectId(), userId, currentUserId, operationType, path, HttpMethodConstants.POST.name(), null, userRoles, logs); + setLog(request.getProjectId(), userId, currentUserId, operationType, path, HttpMethodConstants.POST.name(), null, userRoles, logs, OperationLogModule.PROJECT_MANAGEMENT_PERMISSION_MEMBER); } }); if (!CollectionUtils.isEmpty(relations)) { @@ -363,7 +363,7 @@ public class ProjectMemberService { // 操作记录 userIds.forEach(userId -> { // 操作记录 - setLog(request.getProjectId(), userId, currentUserId, OperationLogType.DELETE.name(), "/project/member/remove", HttpMethodConstants.GET.name(), null, null, logs); + setLog(request.getProjectId(), userId, currentUserId, OperationLogType.DELETE.name(), "/project/member/remove", HttpMethodConstants.GET.name(), null, null, logs, OperationLogModule.PROJECT_MANAGEMENT_PERMISSION_MEMBER); }); operationLogService.batchAdd(logs); } @@ -416,7 +416,7 @@ public class ProjectMemberService { * @param method 请求方法 * @param logs 日志集合 */ - private void setLog(String projectId, String memberId, String createUserId, String type, String path, String method, Object originalVal, Object modifiedVal, List logs) { + private void setLog(String projectId, String memberId, String createUserId, String type, String path, String method, Object originalVal, Object modifiedVal, List logs, String module) { Project project = projectMapper.selectByPrimaryKey(projectId); User user = userMapper.selectByPrimaryKey(memberId); LogDTO dto = new LogDTO( @@ -425,7 +425,7 @@ public class ProjectMemberService { memberId, createUserId, type, - OperationLogModule.PROJECT_MANAGEMENT_PERMISSION_MEMBER, + module, user.getName()); dto.setPath(path); dto.setMethod(method); diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/controller/OrganizationController.java b/backend/services/system-setting/src/main/java/io/metersphere/system/controller/OrganizationController.java index 1b2bf27402..1717509db2 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/controller/OrganizationController.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/controller/OrganizationController.java @@ -10,6 +10,7 @@ import io.metersphere.system.dto.request.*; import io.metersphere.system.dto.sdk.OptionDTO; import io.metersphere.system.dto.user.response.UserInviteResponse; import io.metersphere.system.log.annotation.Log; +import io.metersphere.system.log.constants.OperationLogModule; import io.metersphere.system.log.constants.OperationLogType; import io.metersphere.system.service.OrganizationService; import io.metersphere.system.service.SimpleUserService; @@ -75,7 +76,7 @@ public class OrganizationController { @Operation(summary = "系统设置-组织-成员-更新用户") @RequiresPermissions(value = {PermissionConstants.ORGANIZATION_MEMBER_UPDATE, PermissionConstants.PROJECT_USER_READ_ADD, PermissionConstants.PROJECT_USER_READ_DELETE}, logical = Logical.OR) public void updateMember(@Validated @RequestBody OrganizationMemberUpdateRequest organizationMemberExtendRequest) { - organizationService.updateMember(organizationMemberExtendRequest, SessionUtils.getUserId()); + organizationService.updateMember(organizationMemberExtendRequest, SessionUtils.getUserId(), "/organization/update-member", OperationLogModule.SETTING_ORGANIZATION_MEMBER); } @PostMapping("/project/add-member") diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/controller/SystemOrganizationController.java b/backend/services/system-setting/src/main/java/io/metersphere/system/controller/SystemOrganizationController.java index 3fd60963ca..d32c4509fc 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/controller/SystemOrganizationController.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/controller/SystemOrganizationController.java @@ -10,6 +10,7 @@ import io.metersphere.system.dto.request.*; import io.metersphere.system.dto.sdk.OptionDTO; import io.metersphere.system.dto.user.UserExtendDTO; import io.metersphere.system.log.annotation.Log; +import io.metersphere.system.log.constants.OperationLogModule; import io.metersphere.system.log.constants.OperationLogType; import io.metersphere.system.service.OrganizationService; import io.metersphere.system.service.SimpleUserService; @@ -198,6 +199,6 @@ public class SystemOrganizationController { @Operation(summary = "系统设置-系统-组织与项目-组织-成员-更新成员用户组") @RequiresPermissions(PermissionConstants.SYSTEM_ORGANIZATION_PROJECT_MEMBER_UPDATE) public void updateMember(@Validated @RequestBody OrganizationMemberUpdateRequest organizationMemberExtendRequest) { - organizationService.updateMember(organizationMemberExtendRequest, SessionUtils.getUserId()); + organizationService.updateMember(organizationMemberExtendRequest, SessionUtils.getUserId(), "/system/organization/update-member", OperationLogModule.SETTING_SYSTEM_ORGANIZATION); } } diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/service/OrganizationService.java b/backend/services/system-setting/src/main/java/io/metersphere/system/service/OrganizationService.java index 9011796571..c62660cc2a 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/service/OrganizationService.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/service/OrganizationService.java @@ -714,7 +714,7 @@ public class OrganizationService { * @param organizationMemberUpdateRequest 请求参数 * @param createUserId 创建人ID */ - public void updateMember(OrganizationMemberUpdateRequest organizationMemberUpdateRequest, String createUserId) { + public void updateMember(OrganizationMemberUpdateRequest organizationMemberUpdateRequest, String createUserId, String path, String module) { String organizationId = organizationMemberUpdateRequest.getOrganizationId(); //校验组织是否存在 checkOrgExistById(organizationId); @@ -735,7 +735,7 @@ public class OrganizationService { List logDTOList = new ArrayList<>(); //更新用户组 List userRoleIds = organizationMemberUpdateRequest.getUserRoleIds(); - updateUserRoleRelation(createUserId, organizationId, user, userRoleIds, sqlSession, logDTOList); + updateUserRoleRelation(createUserId, organizationId, user, userRoleIds, sqlSession, logDTOList, path, module); //更新项目 List projectIds = organizationMemberUpdateRequest.getProjectIds(); if (CollectionUtils.isNotEmpty(projectIds)) { @@ -749,20 +749,6 @@ public class OrganizationService { userRoleRelationExample = new UserRoleRelationExample(); userRoleRelationExample.createCriteria().andUserIdEqualTo(memberId).andSourceIdIn(projectInDBInOrgIds); userRoleRelationMapper.deleteByExample(userRoleRelationExample); - //add Log - for (String projectInDBInOrgId : projectInDBInOrgIds) { - String path = "/organization/update-member"; - LogDTO dto = new LogDTO( - projectInDBInOrgId, - organizationId, - memberId, - createUserId, - OperationLogType.UPDATE.name(), - OperationLogModule.PROJECT_MANAGEMENT_PERMISSION_MEMBER, - user.getName()); - setLog(dto, path, logDTOList, ""); - } - } } @@ -789,17 +775,6 @@ public class OrganizationService { UserRoleRelation userRoleRelation = buildUserRoleRelation(createUserId, memberId, projectId, InternalUserRole.PROJECT_MEMBER.getValue(), organizationId); userRoleRelation.setOrganizationId(organizationId); userRoleRelationMapper.insert(userRoleRelation); - //add Log - String path = "/organization/update-member"; - LogDTO dto = new LogDTO( - projectId, - organizationId, - memberId, - createUserId, - OperationLogType.UPDATE.name(), - OperationLogModule.PROJECT_MANAGEMENT_PERMISSION_MEMBER, - user.getName()); - setLog(dto, path, logDTOList, userRoleRelation); }); } @@ -815,7 +790,7 @@ public class OrganizationService { return userRoleRelation; } - private void updateUserRoleRelation(String createUserId, String organizationId, User user, List userRoleIds, SqlSession sqlSession, List logDTOList) { + private void updateUserRoleRelation(String createUserId, String organizationId, User user, List userRoleIds, SqlSession sqlSession, List logDTOList, String path, String module) { //检查用户组是否是组织级别用户组 String memberId = user.getId(); Map userRoleMap = checkUseRoleExist(userRoleIds, organizationId); @@ -829,18 +804,17 @@ public class OrganizationService { UserRoleRelation userRoleRelation = buildUserRoleRelation(createUserId, memberId, organizationId, userRoleId, organizationId); userRoleRelation.setOrganizationId(organizationId); userRoleRelationMapper.insert(userRoleRelation); - //add Log - String path = "/organization/update-member"; - LogDTO dto = new LogDTO( - OperationLogConstants.ORGANIZATION, - organizationId, - memberId, - createUserId, - OperationLogType.UPDATE.name(), - OperationLogModule.SETTING_ORGANIZATION_MEMBER, - user.getName()); - setLog(dto, path, logDTOList, userRoleRelation); }); + //add Log + LogDTO dto = new LogDTO( + OperationLogConstants.ORGANIZATION, + organizationId, + memberId, + createUserId, + OperationLogType.UPDATE.name(), + module, + user.getName()); + setLog(dto, path, logDTOList, userRoleInDBInOrgIds); } /** diff --git a/frontend/src/views/setting/system/organizationAndProject/components/userDrawer.vue b/frontend/src/views/setting/system/organizationAndProject/components/userDrawer.vue index c2012126e3..d467106078 100644 --- a/frontend/src/views/setting/system/organizationAndProject/components/userDrawer.vue +++ b/frontend/src/views/setting/system/organizationAndProject/components/userDrawer.vue @@ -283,12 +283,14 @@ () => props.organizationId, () => { fetchData(); + getUserGroupOptions(); } ); watch( () => props.projectId, () => { fetchData(); + getUserGroupOptions(); } ); watch(