From dd48c5c66acb6fdc06360725f6be0e9c8683059d Mon Sep 17 00:00:00 2001 From: zengchenxi Date: Mon, 15 Jan 2024 16:50:11 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=9D=83=E9=99=90=E3=80=91=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=B2=97=E4=BD=8D=E6=9D=83=E9=99=90=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E6=94=AF=E6=8C=81=E5=A4=9A=E7=A7=8D=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/auth/AuthController.java | 17 +++++++++--- .../auth/vo/AuthPermissionInfoRespVO.java | 3 +++ .../system/convert/auth/AuthConvert.java | 5 +++- .../mes-ui-admin-vue3/src/directives/index.ts | 2 ++ .../src/directives/permission/hasPost.ts | 26 +++++++++++++++++++ mes-ui/mes-ui-admin-vue3/src/locales/en.ts | 3 ++- mes-ui/mes-ui-admin-vue3/src/locales/zh-CN.ts | 3 ++- 7 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 mes-ui/mes-ui-admin-vue3/src/directives/permission/hasPost.ts diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/AuthController.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/AuthController.java index 2df9ddc8..41c9f45c 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/AuthController.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/AuthController.java @@ -10,11 +10,13 @@ import com.chanko.yunxi.mes.framework.security.config.SecurityProperties; import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils; import com.chanko.yunxi.mes.module.system.controller.admin.auth.vo.*; import com.chanko.yunxi.mes.module.system.convert.auth.AuthConvert; +import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.PostDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.permission.MenuDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.permission.RoleDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.enums.logger.LoginLogTypeEnum; import com.chanko.yunxi.mes.module.system.service.auth.AdminAuthService; +import com.chanko.yunxi.mes.module.system.service.dept.PostService; import com.chanko.yunxi.mes.module.system.service.permission.MenuService; import com.chanko.yunxi.mes.module.system.service.permission.PermissionService; import com.chanko.yunxi.mes.module.system.service.permission.RoleService; @@ -32,6 +34,7 @@ import javax.annotation.Resource; import javax.annotation.security.PermitAll; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; @@ -59,9 +62,10 @@ public class AuthController { private PermissionService permissionService; @Resource private SocialClientService socialClientService; - @Resource private SecurityProperties securityProperties; + @Resource + private PostService postService; @PostMapping("/login") @PermitAll @@ -105,7 +109,7 @@ public class AuthController { // 1.2 获得角色列表 Set roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId()); if (CollUtil.isEmpty(roleIds)) { - return success(AuthConvert.INSTANCE.convert(user, Collections.emptyList(), Collections.emptyList())); + return success(AuthConvert.INSTANCE.convert(user, Collections.emptyList(), Collections.emptyList(), Collections.emptyList())); } List roles = roleService.getRoleList(roleIds); roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色 @@ -115,8 +119,15 @@ public class AuthController { List menuList = menuService.getMenuList(menuIds); menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单 + // 1.4 获得岗位信息 + List postList = new ArrayList<>(8); + if(user.getPostIds() != null && user.getPostIds().size() > 0){ + postList = postService.getPostList(user.getPostIds()); + postList.removeIf(post -> !CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())); // 移除禁用的岗位 + } + // 2. 拼接结果返回 - return success(AuthConvert.INSTANCE.convert(user, roles, menuList)); + return success(AuthConvert.INSTANCE.convert(user, roles, menuList, postList)); } // ========== 短信登录相关 ========== diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java index 49b6d045..8b4d6b40 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java @@ -28,6 +28,9 @@ public class AuthPermissionInfoRespVO { @Schema(description = "菜单树", requiredMode = Schema.RequiredMode.REQUIRED) private List menus; + @Schema(description = "岗位数组", requiredMode = Schema.RequiredMode.REQUIRED) + private Set posts; + @Schema(description = "用户信息 VO") @Data @NoArgsConstructor diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/convert/auth/AuthConvert.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/convert/auth/AuthConvert.java index 001bb6dc..09eaa3ed 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/convert/auth/AuthConvert.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/convert/auth/AuthConvert.java @@ -5,6 +5,7 @@ import com.chanko.yunxi.mes.module.system.api.sms.dto.code.SmsCodeSendReqDTO; import com.chanko.yunxi.mes.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import com.chanko.yunxi.mes.module.system.api.social.dto.SocialUserBindReqDTO; import com.chanko.yunxi.mes.module.system.controller.admin.auth.vo.*; +import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.PostDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.permission.MenuDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.permission.RoleDO; @@ -27,7 +28,7 @@ public interface AuthConvert { AuthLoginRespVO convert(OAuth2AccessTokenDO bean); - default AuthPermissionInfoRespVO convert(AdminUserDO user, List roleList, List menuList) { + default AuthPermissionInfoRespVO convert(AdminUserDO user, List roleList, List menuList, List postList) { return AuthPermissionInfoRespVO.builder() .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).build()) .roles(convertSet(roleList, RoleDO::getCode)) @@ -35,6 +36,8 @@ public interface AuthConvert { .permissions(convertSet(menuList, MenuDO::getPermission)) // 菜单树 .menus(buildMenuTree(menuList)) + // 岗位列表 + .posts(convertSet(postList, PostDO::getCode)) .build(); } diff --git a/mes-ui/mes-ui-admin-vue3/src/directives/index.ts b/mes-ui/mes-ui-admin-vue3/src/directives/index.ts index 89cc8ba1..b0bc635a 100644 --- a/mes-ui/mes-ui-admin-vue3/src/directives/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/directives/index.ts @@ -1,6 +1,7 @@ import type { App } from 'vue' import { hasRole } from './permission/hasRole' import { hasPermi } from './permission/hasPermi' +import { hasPost } from './permission/hasPost' /** * 导出指令:v-xxx @@ -10,4 +11,5 @@ import { hasPermi } from './permission/hasPermi' export const setupAuth = (app: App) => { hasRole(app) hasPermi(app) + hasPost(app) } diff --git a/mes-ui/mes-ui-admin-vue3/src/directives/permission/hasPost.ts b/mes-ui/mes-ui-admin-vue3/src/directives/permission/hasPost.ts new file mode 100644 index 00000000..ae301fc1 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/directives/permission/hasPost.ts @@ -0,0 +1,26 @@ +import type { App } from 'vue' +import { CACHE_KEY, useCache } from '@/hooks/web/useCache' + +const { t } = useI18n() // 国际化 + +export function hasPost(app: App) { + app.directive('hasPost', (el, binding) => { + const { wsCache } = useCache() + const { value } = binding + const posts = wsCache.get(CACHE_KEY.USER).posts + console.log(posts); + if (value && value instanceof Array && value.length > 0) { + const postFlag = value + + const hasPost = posts.some((post: string) => { + return postFlag.includes(post) + }) + + if (!hasPost) { + el.parentNode && el.parentNode.removeChild(el) + } + } else { + throw new Error(t('permission.hasPost')) + } + }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/locales/en.ts b/mes-ui/mes-ui-admin-vue3/src/locales/en.ts index e8dbcd6f..63dac3c2 100644 --- a/mes-ui/mes-ui-admin-vue3/src/locales/en.ts +++ b/mes-ui/mes-ui-admin-vue3/src/locales/en.ts @@ -64,7 +64,8 @@ export default { }, permission: { hasPermission: `Please set the operation permission label value`, - hasRole: `Please set the role permission tag value` + hasRole: `Please set the role permission tag value`, + hasPost: `Please set the post permission code value` }, setting: { projectSetting: 'Project setting', diff --git a/mes-ui/mes-ui-admin-vue3/src/locales/zh-CN.ts b/mes-ui/mes-ui-admin-vue3/src/locales/zh-CN.ts index 48a745a3..29914627 100644 --- a/mes-ui/mes-ui-admin-vue3/src/locales/zh-CN.ts +++ b/mes-ui/mes-ui-admin-vue3/src/locales/zh-CN.ts @@ -64,7 +64,8 @@ export default { }, permission: { hasPermission: `请设置操作权限标签值`, - hasRole: `请设置角色权限标签值` + hasRole: `请设置角色权限标签值`, + hasPost: `请设置岗位编码值` }, setting: { projectSetting: '项目配置',