From 2521c856e2ac1b16d50d75dfd405a642eedcea4f Mon Sep 17 00:00:00 2001 From: lijiahang Date: Wed, 16 Aug 2023 17:06:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=86=E9=85=8D=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E5=8A=9F=E8=83=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SystemUserController.java | 16 +- .../request/user/SystemUserCreateRequest.java | 2 + .../user/SystemUserUpdateRoleRequest.java | 6 +- .../module/infra/entity/vo/SystemUserVO.java | 3 - .../infra/service/SystemUserRoleService.java | 8 + .../impl/SystemUserRoleServiceImpl.java | 26 ++-- .../service/impl/SystemUserServiceImpl.java | 3 +- orion-ops-ui/src/api/user/user.ts | 9 +- .../user/role/user-role-selector.vue | 60 ++++++++ orion-ops-ui/src/store/modules/app/index.ts | 2 +- orion-ops-ui/src/store/modules/cache/index.ts | 22 ++- orion-ops-ui/src/store/modules/cache/types.ts | 2 + .../src/views/exception/forbidden/index.vue | 10 +- .../src/views/exception/not-found/index.vue | 10 +- .../system/menu/components/menu-table.vue | 4 +- .../role/components/role-menu-bind-modal.vue | 2 +- .../views/user/role/components/role-table.vue | 2 +- orion-ops-ui/src/views/user/role/index.vue | 2 +- .../user/user/components/user-form-modal.vue | 8 +- .../user-reset-password-form-modal.vue | 123 +++++++++++++++ .../views/user/user/components/user-table.vue | 1 + .../user-update-roles-form-modal.vue | 141 ++++++++++++++++++ orion-ops-ui/src/views/user/user/index.vue | 21 ++- 23 files changed, 443 insertions(+), 40 deletions(-) create mode 100644 orion-ops-ui/src/components/user/role/user-role-selector.vue create mode 100644 orion-ops-ui/src/views/user/user/components/user-reset-password-form-modal.vue create mode 100644 orion-ops-ui/src/views/user/user/components/user-update-roles-form-modal.vue diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java index d46188a4..322e6f83 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java @@ -70,19 +70,19 @@ public class SystemUserController { @Operation(summary = "修改用户角色") @PreAuthorize("@ss.hasPermission('infra:system-user:update-role')") public Integer updateUserRole(@Validated @RequestBody SystemUserUpdateRoleRequest request) { - if (Lists.isEmpty(request.getRoles())) { + if (Lists.isEmpty(request.getRoleIdList())) { // 删除用户角色 return systemUserRoleService.deleteUserRoles(request); } else { - // 更新用户橘色 + // 更新用户角色 return systemUserRoleService.updateUserRoles(request); } } @PutMapping("/reset-password") - @Operation(summary = "重置密码") + @Operation(summary = "重置用户密码") @PreAuthorize("@ss.hasPermission('infra:system-user:reset-password')") - public HttpWrapper resetPassword(@Validated @RequestBody UserResetPasswordRequest request) { + public HttpWrapper resetUserPassword(@Validated @RequestBody UserResetPasswordRequest request) { systemUserService.resetPassword(request); return HttpWrapper.ok(); } @@ -104,6 +104,14 @@ public class SystemUserController { return systemUserService.getSystemUserList(); } + @IgnoreLog(IgnoreLogMode.RET) + @GetMapping("/get-roles") + @Operation(summary = "查询用户的角色id") + @PreAuthorize("@ss.hasPermission('infra:system-user:query')") + public List getUserRoleIdList(@RequestParam("userId") Long userId) { + return systemUserRoleService.getUserRoleIdList(userId); + } + @IgnoreLog(IgnoreLogMode.RET) @PostMapping("/query") @Operation(summary = "分页查询用户") diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserCreateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserCreateRequest.java index b1a240d4..1edab3d5 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserCreateRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserCreateRequest.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import java.io.Serializable; @@ -26,6 +27,7 @@ public class SystemUserCreateRequest implements Serializable { @NotBlank @Size(max = 32) + @Pattern(regexp = "^[a-zA-Z0-9]{4,32}$") @Schema(description = "用户名") private String username; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRoleRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRoleRequest.java index e3d86391..6e46d39c 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRoleRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/user/SystemUserUpdateRoleRequest.java @@ -8,7 +8,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import java.io.Serializable; -import java.util.Set; +import java.util.List; /** * 用户 更新角色请求对象 @@ -28,7 +28,7 @@ public class SystemUserUpdateRoleRequest implements Serializable { @Schema(description = "id") private Long id; - @Schema(description = "角色编码") - private Set roles; + @Schema(description = "roleIdList") + private List roleIdList; } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemUserVO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemUserVO.java index e4ec558e..62b9d62e 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemUserVO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/vo/SystemUserVO.java @@ -31,9 +31,6 @@ public class SystemUserVO implements Serializable { @Schema(description = "用户名") private String username; - @Schema(description = "密码") - private String password; - @Schema(description = "花名") private String nickname; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserRoleService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserRoleService.java index a2401416..813b08c2 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserRoleService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserRoleService.java @@ -13,6 +13,14 @@ import java.util.List; */ public interface SystemUserRoleService { + /** + * 查询用户 roleId + * + * @param userId userId + * @return roleId + */ + List getUserRoleIdList(Long userId); + /** * 删除用户角色 * diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java index 3b697315..1e792c7d 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java @@ -20,9 +20,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; /** @@ -45,6 +43,11 @@ public class SystemUserRoleServiceImpl implements SystemUserRoleService { @Resource private SystemUserRoleDAO systemUserRoleDAO; + @Override + public List getUserRoleIdList(Long userId) { + return systemUserRoleDAO.selectRoleIdByUserId(userId); + } + @Override public Integer deleteUserRoles(SystemUserUpdateRoleRequest request) { Long userId = request.getId(); @@ -61,20 +64,20 @@ public class SystemUserRoleServiceImpl implements SystemUserRoleService { @Transactional(rollbackFor = Exception.class) public Integer updateUserRoles(SystemUserUpdateRoleRequest request) { Long userId = request.getId(); - Set roleCodeList = request.getRoles(); + List roleIdList = request.getRoleIdList(); // 查询用户 SystemUserDO record = systemUserDAO.selectById(userId); Valid.notNull(record, ErrorMessage.USER_ABSENT); // 查询角色 - List userRoles = systemRoleDAO.selectByCodeList(roleCodeList); + List userRoles = systemRoleDAO.selectBatchIds(roleIdList); // 检查角色是否存在 - if (userRoles.size() != roleCodeList.size()) { + if (roleIdList.size() != userRoles.size()) { // 有不存在的角色 - List userRoleCodes = userRoles.stream() - .map(SystemRoleDO::getCode) + List userRoleIdLists = userRoles.stream() + .map(SystemRoleDO::getId) .collect(Collectors.toList()); - for (String roleCode : roleCodeList) { - Valid.in(roleCode, userRoleCodes, ErrorMessage.ROLE_CODE_ABSENT, roleCode); + for (Long roleId : roleIdList) { + Valid.in(roleId, userRoleIdLists, ErrorMessage.ROLE_CODE_ABSENT, roleId); } } // 删除用户角色关联 @@ -90,7 +93,10 @@ public class SystemUserRoleServiceImpl implements SystemUserRoleService { effect += addUserRoles.size(); // 更新缓存中的角色 RedisUtils.processSetJson(UserCacheKeyDefine.USER_INFO, s -> { - s.setRoles(new ArrayList<>(roleCodeList)); + List roleCodeList = userRoles.stream() + .map(SystemRoleDO::getCode) + .collect(Collectors.toList()); + s.setRoles(roleCodeList); }, userId); return effect; } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java index 53f382de..24ba6671 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java @@ -144,8 +144,7 @@ public class SystemUserServiceImpl implements SystemUserService { .like(SystemUserDO::getNickname, request.getNickname()) .like(SystemUserDO::getMobile, request.getMobile()) .like(SystemUserDO::getEmail, request.getEmail()) - .eq(SystemUserDO::getStatus, request.getStatus()) - .orderByDesc(SystemUserDO::getId); + .eq(SystemUserDO::getStatus, request.getStatus()); // 查询 return systemUserDAO.of() .wrapper(wrapper) diff --git a/orion-ops-ui/src/api/user/user.ts b/orion-ops-ui/src/api/user/user.ts index 8cfad6c5..904c6cff 100644 --- a/orion-ops-ui/src/api/user/user.ts +++ b/orion-ops-ui/src/api/user/user.ts @@ -20,7 +20,7 @@ export interface UserCreateRequest { */ export interface UserUpdateRequest extends UserCreateRequest { id: number; - roles?: Array; + roleIdList?: Array; password?: string; } @@ -106,6 +106,13 @@ export function getUserList() { return axios.get('/infra/system-user/list'); } +/** + * 查询用户的 roleId + */ +export function getUserRoleIdList(userId: number) { + return axios.get>('/infra/system-user/get-roles', { params: { userId } }); +} + /** * 分页查询用户 */ diff --git a/orion-ops-ui/src/components/user/role/user-role-selector.vue b/orion-ops-ui/src/components/user/role/user-role-selector.vue new file mode 100644 index 00000000..1b848e48 --- /dev/null +++ b/orion-ops-ui/src/components/user/role/user-role-selector.vue @@ -0,0 +1,60 @@ + + + + + + + diff --git a/orion-ops-ui/src/store/modules/app/index.ts b/orion-ops-ui/src/store/modules/app/index.ts index 34506e07..22ee459c 100644 --- a/orion-ops-ui/src/store/modules/app/index.ts +++ b/orion-ops-ui/src/store/modules/app/index.ts @@ -110,7 +110,7 @@ const useAppStore = defineStore('app', { // 未配置菜单 if (this.serverMenu.length === 0) { Notification.error({ - content: '该用户未配置菜单, 请先配置', + content: '该用户未配置菜单, 请先联系管理员配置', closable: true, }); } diff --git a/orion-ops-ui/src/store/modules/cache/index.ts b/orion-ops-ui/src/store/modules/cache/index.ts index e6dc6163..d16fcd04 100644 --- a/orion-ops-ui/src/store/modules/cache/index.ts +++ b/orion-ops-ui/src/store/modules/cache/index.ts @@ -1,10 +1,12 @@ import { defineStore } from 'pinia'; import { CacheState } from './types'; import { MenuQueryResponse } from '@/api/system/menu'; +import { RoleQueryResponse } from '@/api/user/role'; const useCacheStore = defineStore('cache', { state: (): CacheState => ({ - menus: [] + menus: [], + roles: [], }), getters: {}, @@ -13,16 +15,30 @@ const useCacheStore = defineStore('cache', { /** * 更新菜单 */ - updateMenu(menus: MenuQueryResponse[]) { + updateMenus(menus: MenuQueryResponse[]) { this.menus = menus; }, /** * 清空菜单 */ - resetMenu() { + resetMenus() { this.menus = []; }, + + /** + * 更新角色 + */ + updateRoles(roles: RoleQueryResponse[]) { + this.roles = roles; + }, + + /** + * 清空角色 + */ + resetRoles() { + this.roles = []; + }, }, }); diff --git a/orion-ops-ui/src/store/modules/cache/types.ts b/orion-ops-ui/src/store/modules/cache/types.ts index bde75483..7b14e402 100644 --- a/orion-ops-ui/src/store/modules/cache/types.ts +++ b/orion-ops-ui/src/store/modules/cache/types.ts @@ -1,7 +1,9 @@ import { MenuQueryResponse } from '@/api/system/menu'; +import { RoleQueryResponse } from '@/api/user/role'; export interface CacheState { menus: MenuQueryResponse[], + roles: RoleQueryResponse[], [key: string]: unknown; } diff --git a/orion-ops-ui/src/views/exception/forbidden/index.vue b/orion-ops-ui/src/views/exception/forbidden/index.vue index ceb212ed..d616becb 100644 --- a/orion-ops-ui/src/views/exception/forbidden/index.vue +++ b/orion-ops-ui/src/views/exception/forbidden/index.vue @@ -2,7 +2,7 @@
- 重新登录 + 重新登录 返回工作台
@@ -10,11 +10,19 @@ diff --git a/orion-ops-ui/src/views/user/role/components/role-menu-bind-modal.vue b/orion-ops-ui/src/views/user/role/components/role-menu-bind-modal.vue index 16e398e4..93f793c9 100644 --- a/orion-ops-ui/src/views/user/role/components/role-menu-bind-modal.vue +++ b/orion-ops-ui/src/views/user/role/components/role-menu-bind-modal.vue @@ -74,7 +74,7 @@ if (!cacheStore.menus?.length) { // 加载菜单 const { data: menuData } = await getMenuList({}); - cacheStore.updateMenu(menuData); + cacheStore.updateMenus(menuData); } // 获取角色菜单 const { data: roleMenuIdList } = await getRoleMenuId(record.id); diff --git a/orion-ops-ui/src/views/user/role/components/role-table.vue b/orion-ops-ui/src/views/user/role/components/role-table.vue index f9c9424a..b91d18a6 100644 --- a/orion-ops-ui/src/views/user/role/components/role-table.vue +++ b/orion-ops-ui/src/views/user/role/components/role-table.vue @@ -83,7 +83,7 @@ - { const cacheStore = useCacheStore(); - cacheStore.resetMenu(); + cacheStore.resetMenus(); }); diff --git a/orion-ops-ui/src/views/user/user/components/user-form-modal.vue b/orion-ops-ui/src/views/user/user/components/user-form-modal.vue index c03675c6..7b8976e2 100644 --- a/orion-ops-ui/src/views/user/user/components/user-form-modal.vue +++ b/orion-ops-ui/src/views/user/user/components/user-form-modal.vue @@ -24,16 +24,16 @@ + + + + - - - - diff --git a/orion-ops-ui/src/views/user/user/components/user-reset-password-form-modal.vue b/orion-ops-ui/src/views/user/user/components/user-reset-password-form-modal.vue new file mode 100644 index 00000000..562dbee6 --- /dev/null +++ b/orion-ops-ui/src/views/user/user/components/user-reset-password-form-modal.vue @@ -0,0 +1,123 @@ + + + + + + + diff --git a/orion-ops-ui/src/views/user/user/components/user-table.vue b/orion-ops-ui/src/views/user/user/components/user-table.vue index 5df9aa67..c86c51cc 100644 --- a/orion-ops-ui/src/views/user/user/components/user-table.vue +++ b/orion-ops-ui/src/views/user/user/components/user-table.vue @@ -107,6 +107,7 @@ 重置密码 diff --git a/orion-ops-ui/src/views/user/user/components/user-update-roles-form-modal.vue b/orion-ops-ui/src/views/user/user/components/user-update-roles-form-modal.vue new file mode 100644 index 00000000..b8d3612d --- /dev/null +++ b/orion-ops-ui/src/views/user/user/components/user-update-roles-form-modal.vue @@ -0,0 +1,141 @@ + + + + + + + diff --git a/orion-ops-ui/src/views/user/user/index.vue b/orion-ops-ui/src/views/user/user/index.vue index a943fb9e..59b67ddb 100644 --- a/orion-ops-ui/src/views/user/user/index.vue +++ b/orion-ops-ui/src/views/user/user/index.vue @@ -3,11 +3,17 @@ + @openUpdate="(e) => modal.openUpdate(e)" + @openResetPassword="(e) => resetModal.open(e)" + @openUpdateRole="(e) => updateRoleModal.open(e)" /> + + + + @@ -20,10 +26,21 @@