diff --git a/backend/src/main/java/io/metersphere/service/UserService.java b/backend/src/main/java/io/metersphere/service/UserService.java index 192f17f61d..1e607fb6e5 100644 --- a/backend/src/main/java/io/metersphere/service/UserService.java +++ b/backend/src/main/java/io/metersphere/service/UserService.java @@ -3,7 +3,6 @@ package io.metersphere.service; import io.metersphere.base.domain.*; import io.metersphere.base.mapper.*; import io.metersphere.base.mapper.ext.ExtUserRoleMapper; -import io.metersphere.commons.constants.RoleConstants; import io.metersphere.commons.exception.MSException; import io.metersphere.commons.utils.CodingUtil; import io.metersphere.controller.request.member.AddMemberRequest; @@ -247,19 +246,27 @@ public class UserService { return extUserRoleMapper.getMemberList(request); } - @Transactional(rollbackFor = Exception.class) public void addMember(AddMemberRequest request) { if (!CollectionUtils.isEmpty(request.getUserIds())) { for (String userId : request.getUserIds()) { - for (String roleId : request.getRoleIds()) { - UserRole userRole = new UserRole(); - userRole.setRoleId(roleId); - userRole.setSourceId(request.getWorkspaceId()); - userRole.setUserId(userId); - userRole.setId(UUID.randomUUID().toString()); - userRole.setUpdateTime(System.currentTimeMillis()); - userRole.setCreateTime(System.currentTimeMillis()); - userRoleMapper.insertSelective(userRole); + UserRoleExample userRoleExample = new UserRoleExample(); + userRoleExample.createCriteria().andUserIdEqualTo(userId).andSourceIdEqualTo(request.getWorkspaceId()); + List userRoles = userRoleMapper.selectByExample(userRoleExample); + if (userRoles.size() > 0) { + User user = userMapper.selectByPrimaryKey(userId); + String username = user.getName(); + MSException.throwException("The user [" + username + "] already exists in the current workspace!"); + } else { + for (String roleId : request.getRoleIds()) { + UserRole userRole = new UserRole(); + userRole.setRoleId(roleId); + userRole.setSourceId(request.getWorkspaceId()); + userRole.setUserId(userId); + userRole.setId(UUID.randomUUID().toString()); + userRole.setUpdateTime(System.currentTimeMillis()); + userRole.setCreateTime(System.currentTimeMillis()); + userRoleMapper.insertSelective(userRole); + } } } } @@ -275,15 +282,24 @@ public class UserService { public void addOrganizationMember(AddOrgMemberRequest request) { if (!CollectionUtils.isEmpty(request.getUserIds())) { for (String userId : request.getUserIds()) { - for (String roleId : request.getRoleIds()) { - UserRole userRole = new UserRole(); - userRole.setId(UUID.randomUUID().toString()); - userRole.setRoleId(roleId); - userRole.setSourceId(request.getOrganizationId()); - userRole.setUserId(userId); - userRole.setUpdateTime(System.currentTimeMillis()); - userRole.setCreateTime(System.currentTimeMillis()); - userRoleMapper.insertSelective(userRole); + UserRoleExample userRoleExample = new UserRoleExample(); + userRoleExample.createCriteria().andUserIdEqualTo(userId).andSourceIdEqualTo(request.getOrganizationId()); + List userRoles = userRoleMapper.selectByExample(userRoleExample); + if (userRoles.size() > 0) { + User user = userMapper.selectByPrimaryKey(userId); + String username = user.getName(); + MSException.throwException("The user [" + username + "] already exists in the current organization!"); + } else { + for (String roleId : request.getRoleIds()) { + UserRole userRole = new UserRole(); + userRole.setId(UUID.randomUUID().toString()); + userRole.setRoleId(roleId); + userRole.setSourceId(request.getOrganizationId()); + userRole.setUserId(userId); + userRole.setUpdateTime(System.currentTimeMillis()); + userRole.setCreateTime(System.currentTimeMillis()); + userRoleMapper.insertSelective(userRole); + } } } } diff --git a/frontend/src/performance/components/router/router.js b/frontend/src/performance/components/router/router.js index 30f98e4660..692e0ed6ae 100644 --- a/frontend/src/performance/components/router/router.js +++ b/frontend/src/performance/components/router/router.js @@ -2,18 +2,17 @@ import Vue from "vue"; import VueRouter from 'vue-router' import RouterSidebar from "./RouterSidebar"; import Setting from "../settings/Setting"; -import Workspace from "../settings/Workspace"; -import User from "../settings/User"; +import User from "../settings/system/User"; import EditTestPlan from "../testPlan/EditTestPlan"; import AllTestPlan from "../testPlan/AllTestPlan"; -import Organization from "../settings/Organization"; -import OrganizationMember from "../settings/OrganizationMember"; -import Member from "../settings/Member"; -import TestResourcePool from "../settings/TestResourcePool"; +import Organization from "../settings/system/Organization"; +import OrganizationMember from "../settings/organization/OrganizationMember"; +import Member from "../settings/workspace/WorkspaceMember"; +import TestResourcePool from "../settings/system/TestResourcePool"; import MsProject from "../project/MsProject"; -import OrganizationWorkspace from "../settings/OrganizationWorkspace"; -import PersonSetting from "../settings/PersonSetting"; -import SystemWorkspace from "../settings/SystemWorkspace"; +import OrganizationWorkspace from "../settings/organization/OrganizationWorkspace"; +import PersonSetting from "../settings/personal/PersonSetting"; +import SystemWorkspace from "../settings/system/SystemWorkspace"; Vue.use(VueRouter); @@ -32,10 +31,6 @@ const router = new VueRouter({ content: Setting }, children: [ - { - path: 'workspace', - component: Workspace, - }, { path: 'user', component: User, diff --git a/frontend/src/performance/components/settings/Workspace.vue b/frontend/src/performance/components/settings/Workspace.vue deleted file mode 100644 index 04b25ade5a..0000000000 --- a/frontend/src/performance/components/settings/Workspace.vue +++ /dev/null @@ -1,176 +0,0 @@ - - - - - diff --git a/frontend/src/performance/components/settings/OrganizationMember.vue b/frontend/src/performance/components/settings/organization/OrganizationMember.vue similarity index 98% rename from frontend/src/performance/components/settings/OrganizationMember.vue rename to frontend/src/performance/components/settings/organization/OrganizationMember.vue index 4c5c74288d..81459ea1e5 100644 --- a/frontend/src/performance/components/settings/OrganizationMember.vue +++ b/frontend/src/performance/components/settings/organization/OrganizationMember.vue @@ -112,8 +112,8 @@