From e58f383a4dc35cbb02424f512fba12257bafc599 Mon Sep 17 00:00:00 2001 From: guoyuqi Date: Tue, 8 Aug 2023 11:09:04 +0800 Subject: [PATCH] fix: delete project member when no projectIds --- .../controller/OrganizationController.java | 4 +- .../system/service/OrganizationService.java | 25 ++++++++ .../OrganizationControllerTests.java | 60 ++++++++++++------- .../resources/dml/init_sys_organization.sql | 7 +++ 4 files changed, 73 insertions(+), 23 deletions(-) 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 19f286e48c..60fd640a77 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 @@ -61,14 +61,14 @@ public class OrganizationController { @PostMapping("/update-member") @Operation(summary = "更新用户") - @RequiresPermissions(PermissionConstants.ORGANIZATION_MEMBER_UPDATE) + @RequiresPermissions(value = {PermissionConstants.ORGANIZATION_MEMBER_UPDATE, PermissionConstants.PROJECT_USER_READ_ADD, PermissionConstants.PROJECT_USER_READ_DELETE}) public void updateMember(@Validated @RequestBody OrganizationMemberUpdateRequest organizationMemberExtendRequest) { organizationService.updateMember(organizationMemberExtendRequest, SessionUtils.getUserId()); } @PostMapping("/project/add-member") @Operation(summary = "添加组织成员至项目") - @RequiresPermissions(PermissionConstants.ORGANIZATION_MEMBER_UPDATE) + @RequiresPermissions(value = {PermissionConstants.ORGANIZATION_MEMBER_UPDATE, PermissionConstants.PROJECT_USER_READ_ADD}) public void addMemberToProject(@Validated @RequestBody OrgMemberExtendProjectRequest orgMemberExtendProjectRequest) { organizationService.addMemberToProject(orgMemberExtendProjectRequest, SessionUtils.getUserId()); } 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 a7bcd43e00..d7770077ae 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 @@ -497,7 +497,32 @@ public class OrganizationService { List projectIds = organizationMemberUpdateRequest.getProjectIds(); if (CollectionUtils.isNotEmpty(projectIds)) { updateProjectUserRelation(createUserId, organizationId, memberId, projectIds, sqlSession, logDTOList); + } else { + ProjectExample projectExample = new ProjectExample(); + projectExample.createCriteria().andOrganizationIdEqualTo(organizationId); + List projects = projectMapper.selectByExample(projectExample); + if (CollectionUtils.isNotEmpty(projects)) { + List projectInDBInOrgIds = projects.stream().map(Project::getId).collect(Collectors.toList()); + 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.ORGANIZATION_MEMBER, + "成员"); + setLog(dto, path, logDTOList, ""); + } + + } } + sqlSession.flushStatements(); SqlSessionUtils.closeSqlSession(sqlSession, sqlSessionFactory); //写入操作日志 diff --git a/backend/services/system-setting/src/test/java/io/metersphere/system/controller/OrganizationControllerTests.java b/backend/services/system-setting/src/test/java/io/metersphere/system/controller/OrganizationControllerTests.java index e34948ce70..ccc4b85d3f 100644 --- a/backend/services/system-setting/src/test/java/io/metersphere/system/controller/OrganizationControllerTests.java +++ b/backend/services/system-setting/src/test/java/io/metersphere/system/controller/OrganizationControllerTests.java @@ -124,7 +124,25 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(3) + @Order(4) + public void updateOrgMemberSuccessWithNoSysProjectIds() throws Exception { + OrganizationMemberExtendRequest organizationMemberRequest = new OrganizationMemberExtendRequest(); + organizationMemberRequest.setOrganizationId("sys_default_organization_7"); + organizationMemberRequest.setMemberIds(Arrays.asList("sys_default_user", "sys_default_user2")); + organizationMemberRequest.setUserRoleIds(Arrays.asList("sys_default_org_role_id_7", "sys_default_project_role_id_8")); + this.requestPost(ORGANIZATION_LIST_ADD_MEMBER, organizationMemberRequest, status().isOk()); + + OrganizationMemberUpdateRequest organizationMemberUpdateRequest = new OrganizationMemberUpdateRequest(); + organizationMemberUpdateRequest.setOrganizationId("sys_default_organization_7"); + organizationMemberUpdateRequest.setMemberId("sys_default_user2"); + organizationMemberUpdateRequest.setUserRoleIds(List.of("sys_default_org_role_id_7")); + this.requestPost(ORGANIZATION_UPDATE_MEMBER, organizationMemberUpdateRequest, status().isOk()); + // 批量添加成员成功后, 验证是否添加成功 + listByKeyWord("testUserTwo", "sys_default_organization_7", true, "sys_default_org_role_id_7", null, false, null, null); + } + + @Test + @Order(5) public void updateOrgMemberSuccessWithPartRoles() throws Exception { OrganizationMemberUpdateRequest organizationMemberUpdateRequest = new OrganizationMemberUpdateRequest(); organizationMemberUpdateRequest.setOrganizationId("sys_default_organization_3"); @@ -138,7 +156,7 @@ public class OrganizationControllerTests extends BaseTest { @Test - @Order(4) + @Order(6) public void updateOrgMemberError() throws Exception { //组织ID正确 // 成员为空 @@ -159,7 +177,7 @@ public class OrganizationControllerTests extends BaseTest { @Test - @Order(5) + @Order(7) public void updateOrgMemberToRoleSuccess() throws Exception { OrganizationMemberExtendRequest organizationMemberRequest = new OrganizationMemberExtendRequest(); organizationMemberRequest.setOrganizationId("sys_default_organization_3"); @@ -171,7 +189,7 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(6) + @Order(8) public void updateOrgMemberToRoleError() throws Exception { //组织ID正确 // 成员选择为空 @@ -200,7 +218,7 @@ public class OrganizationControllerTests extends BaseTest { @Test - @Order(7) + @Order(9) public void addOrgMemberToProjectSuccess() throws Exception { OrgMemberExtendProjectRequest organizationMemberRequest = new OrgMemberExtendProjectRequest(); organizationMemberRequest.setOrganizationId("sys_default_organization_3"); @@ -212,7 +230,7 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(8) + @Order(10) public void addOrgMemberToProjectError() throws Exception { // 成员选择为空 addOrUpdateOrganizationProjectMemberError(ORGANIZATION_PROJECT_ADD_MEMBER, "sys_default_organization_3", Collections.emptyList(), Arrays.asList("projectId1", "projectId2"), status().isBadRequest()); @@ -225,13 +243,13 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(9) + @Order(11) public void getOrgMemberListSuccess() throws Exception { listByKeyWord("testUserOne", "sys_default_organization_3", false, null, null, false, null, null); } @Test - @Order(7) + @Order(12) public void getOrgMemberListSuccessWidthEmpty() throws Exception { OrganizationRequest organizationRequest = new OrganizationRequest(); organizationRequest.setCurrent(1); @@ -258,7 +276,7 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(8) + @Order(13) public void getOrgMemberListError() throws Exception { // 页码有误 OrganizationRequest organizationRequest = new OrganizationRequest(); @@ -278,26 +296,26 @@ public class OrganizationControllerTests extends BaseTest { @Test - @Order(11) + @Order(14) public void removeOrgMemberSuccess() throws Exception { this.requestGet(ORGANIZATION_REMOVE_MEMBER + "/sys_default_organization_6/sys_default_user", status().isOk()); } @Test - @Order(12) + @Order(15) public void removeOrgMemberSuccessWithNoProject() throws Exception { this.requestGet(ORGANIZATION_REMOVE_MEMBER + "/sys_default_organization_3/sys_default_user", status().isOk()); } @Test - @Order(13) + @Order(16) public void removeOrgMemberError() throws Exception { // 项目不存在 this.requestGet(ORGANIZATION_REMOVE_MEMBER + "/default-organization-x/admin-x", status().is5xxServerError()); } @Test - @Order(14) + @Order(17) public void getProjectListByOrgSuccess() throws Exception { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/organization/project/list/sys_default_organization_3") .header(SessionConstants.HEADER_TOKEN, sessionId) @@ -316,7 +334,7 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(15) + @Order(18) public void getProjectEmptyListByOrg() throws Exception { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/organization/project/list/sys_default_organization_5") .header(SessionConstants.HEADER_TOKEN, sessionId) @@ -332,7 +350,7 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(16) + @Order(19) public void getProjectListByOrgError() throws Exception { mockMvc.perform(MockMvcRequestBuilders.get("/organization/project/list/sys_default_organization_x") .header(SessionConstants.HEADER_TOKEN, sessionId) @@ -344,7 +362,7 @@ public class OrganizationControllerTests extends BaseTest { @Test - @Order(17) + @Order(20) public void getUserRoleListByOrgSuccess() throws Exception { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/organization/user/role/list/sys_default_organization_3") .header(SessionConstants.HEADER_TOKEN, sessionId) @@ -363,7 +381,7 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(18) + @Order(21) public void getUserRoleEmptyListByOrg() throws Exception { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/organization/user/role/list/sys_default_organization_6") .header(SessionConstants.HEADER_TOKEN, sessionId) @@ -385,7 +403,7 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(19) + @Order(22) public void getUserRoleListByOrgError() throws Exception { mockMvc.perform(MockMvcRequestBuilders.get("/organization/user/role/list/sys_default_organization_x") .header(SessionConstants.HEADER_TOKEN, sessionId) @@ -398,7 +416,7 @@ public class OrganizationControllerTests extends BaseTest { @Test - @Order(20) + @Order(23) public void getNotExistUserListByOrgSuccess() throws Exception { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/organization/not-exist/user/list/sys_default_organization_3") .header(SessionConstants.HEADER_TOKEN, sessionId) @@ -417,7 +435,7 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(21) + @Order(24) public void getNotExistUserListWithNoRelation() throws Exception { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/organization/not-exist/user/list/sys_default_organization_5") .header(SessionConstants.HEADER_TOKEN, sessionId) @@ -433,7 +451,7 @@ public class OrganizationControllerTests extends BaseTest { } @Test - @Order(22) + @Order(25) public void getNotExistUserListByOrgError() throws Exception { mockMvc.perform(MockMvcRequestBuilders.get("/organization/not-exist/user/list/sys_default_organization_x") .header(SessionConstants.HEADER_TOKEN, sessionId) diff --git a/backend/services/system-setting/src/test/resources/dml/init_sys_organization.sql b/backend/services/system-setting/src/test/resources/dml/init_sys_organization.sql index 24a15841dd..a18951732a 100644 --- a/backend/services/system-setting/src/test/resources/dml/init_sys_organization.sql +++ b/backend/services/system-setting/src/test/resources/dml/init_sys_organization.sql @@ -11,6 +11,8 @@ INSERT INTO organization(id,num, name, description, create_time, update_time, cr ('sys_default_organization_5',null, 'organization_name_5', 'XXX-5', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'admin', null, null); INSERT INTO organization(id, num, name, description, create_time, update_time, create_user, update_user, delete_user, delete_time) VALUE ('sys_default_organization_6',null, 'organization_name_6', 'XXX-6', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'admin', null, null); +INSERT INTO organization(id, num, name, description, create_time, update_time, create_user, update_user, delete_user, delete_time) VALUE + ('sys_default_organization_7',null, 'organization_name_7', 'XXX-7', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'admin', null, null); INSERT INTO user(id, name, email, password, create_time, update_time, language, last_organization_id, phone, source, last_project_id, create_user, update_user) VALUE ('sys_default_user', 'testUserOne', 'testUserOne@metersphere.io', MD5('calong'), UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, NULL, NUll, '', 'LOCAL', NULL, 'admin', 'admin'); @@ -41,6 +43,11 @@ INSERT INTO user_role(id, name, description, internal, type, create_time, update INSERT INTO user_role(id, name, description, internal, type, create_time, update_time, create_user, scope_id) VALUE ('sys_default_org_role_id_5', 'sys_default_org_role_id_5', 'XXX', FALSE, 'ORGANIZATION', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'sys_default_organization_3'); +INSERT INTO user_role(id, name, description, internal, type, create_time, update_time, create_user, scope_id) VALUE + ('sys_default_org_role_id_7', 'sys_default_org_role_id_7', 'XXX', FALSE, 'ORGANIZATION', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'sys_default_organization_7'); +INSERT INTO user_role(id, name, description, internal, type, create_time, update_time, create_user, scope_id) VALUE + ('sys_default_org_role_id_8', 'sys_default_org_role_id_8', 'XXX', FALSE, 'ORGANIZATION', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'sys_default_organization_7'); + INSERT INTO user_role_relation(id, user_id, role_id, source_id, create_time, create_user) VALUE ('gyq_user_role_relation_test', 'sys_default_user4', 'sys_default_org_role_id_5', 'sys_default_organization_6', UNIX_TIMESTAMP() * 1000, 'admin');