【权限】增加岗位权限指令,以支持多种按钮控制

pull/1/head
zengchenxi 9 months ago
parent 52febe97fc
commit dd48c5c66a

@ -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.framework.security.core.util.SecurityFrameworkUtils;
import com.chanko.yunxi.mes.module.system.controller.admin.auth.vo.*; 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.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.MenuDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.permission.RoleDO; 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.dal.dataobject.user.AdminUserDO;
import com.chanko.yunxi.mes.module.system.enums.logger.LoginLogTypeEnum; 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.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.MenuService;
import com.chanko.yunxi.mes.module.system.service.permission.PermissionService; import com.chanko.yunxi.mes.module.system.service.permission.PermissionService;
import com.chanko.yunxi.mes.module.system.service.permission.RoleService; 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.annotation.security.PermitAll;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -59,9 +62,10 @@ public class AuthController {
private PermissionService permissionService; private PermissionService permissionService;
@Resource @Resource
private SocialClientService socialClientService; private SocialClientService socialClientService;
@Resource @Resource
private SecurityProperties securityProperties; private SecurityProperties securityProperties;
@Resource
private PostService postService;
@PostMapping("/login") @PostMapping("/login")
@PermitAll @PermitAll
@ -105,7 +109,7 @@ public class AuthController {
// 1.2 获得角色列表 // 1.2 获得角色列表
Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId()); Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId());
if (CollUtil.isEmpty(roleIds)) { 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<RoleDO> roles = roleService.getRoleList(roleIds); List<RoleDO> roles = roleService.getRoleList(roleIds);
roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色 roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色
@ -115,8 +119,15 @@ public class AuthController {
List<MenuDO> menuList = menuService.getMenuList(menuIds); List<MenuDO> menuList = menuService.getMenuList(menuIds);
menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单 menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单
// 1.4 获得岗位信息
List<PostDO> 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. 拼接结果返回 // 2. 拼接结果返回
return success(AuthConvert.INSTANCE.convert(user, roles, menuList)); return success(AuthConvert.INSTANCE.convert(user, roles, menuList, postList));
} }
// ========== 短信登录相关 ========== // ========== 短信登录相关 ==========

@ -28,6 +28,9 @@ public class AuthPermissionInfoRespVO {
@Schema(description = "菜单树", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "菜单树", requiredMode = Schema.RequiredMode.REQUIRED)
private List<MenuVO> menus; private List<MenuVO> menus;
@Schema(description = "岗位数组", requiredMode = Schema.RequiredMode.REQUIRED)
private Set<String> posts;
@Schema(description = "用户信息 VO") @Schema(description = "用户信息 VO")
@Data @Data
@NoArgsConstructor @NoArgsConstructor

@ -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.sms.dto.code.SmsCodeUseReqDTO;
import com.chanko.yunxi.mes.module.system.api.social.dto.SocialUserBindReqDTO; 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.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.oauth2.OAuth2AccessTokenDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.permission.MenuDO; 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.permission.RoleDO;
@ -27,7 +28,7 @@ public interface AuthConvert {
AuthLoginRespVO convert(OAuth2AccessTokenDO bean); AuthLoginRespVO convert(OAuth2AccessTokenDO bean);
default AuthPermissionInfoRespVO convert(AdminUserDO user, List<RoleDO> roleList, List<MenuDO> menuList) { default AuthPermissionInfoRespVO convert(AdminUserDO user, List<RoleDO> roleList, List<MenuDO> menuList, List<PostDO> postList) {
return AuthPermissionInfoRespVO.builder() return AuthPermissionInfoRespVO.builder()
.user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).build()) .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).build())
.roles(convertSet(roleList, RoleDO::getCode)) .roles(convertSet(roleList, RoleDO::getCode))
@ -35,6 +36,8 @@ public interface AuthConvert {
.permissions(convertSet(menuList, MenuDO::getPermission)) .permissions(convertSet(menuList, MenuDO::getPermission))
// 菜单树 // 菜单树
.menus(buildMenuTree(menuList)) .menus(buildMenuTree(menuList))
// 岗位列表
.posts(convertSet(postList, PostDO::getCode))
.build(); .build();
} }

@ -1,6 +1,7 @@
import type { App } from 'vue' import type { App } from 'vue'
import { hasRole } from './permission/hasRole' import { hasRole } from './permission/hasRole'
import { hasPermi } from './permission/hasPermi' import { hasPermi } from './permission/hasPermi'
import { hasPost } from './permission/hasPost'
/** /**
* v-xxx * v-xxx
@ -10,4 +11,5 @@ import { hasPermi } from './permission/hasPermi'
export const setupAuth = (app: App<Element>) => { export const setupAuth = (app: App<Element>) => {
hasRole(app) hasRole(app)
hasPermi(app) hasPermi(app)
hasPost(app)
} }

@ -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<Element>) {
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'))
}
})
}

@ -64,7 +64,8 @@ export default {
}, },
permission: { permission: {
hasPermission: `Please set the operation permission label value`, 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: { setting: {
projectSetting: 'Project setting', projectSetting: 'Project setting',

@ -64,7 +64,8 @@ export default {
}, },
permission: { permission: {
hasPermission: `请设置操作权限标签值`, hasPermission: `请设置操作权限标签值`,
hasRole: `请设置角色权限标签值` hasRole: `请设置角色权限标签值`,
hasPost: `请设置岗位编码值`
}, },
setting: { setting: {
projectSetting: '项目配置', projectSetting: '项目配置',

Loading…
Cancel
Save