【优化】优化登录查询
This commit is contained in:
parent
44b5239f34
commit
68234a112e
@ -41,6 +41,7 @@ import vip.xiaonuo.core.exception.enums.abs.AbstractBaseExceptionEnum;
|
|||||||
import vip.xiaonuo.core.pojo.response.ErrorResponseData;
|
import vip.xiaonuo.core.pojo.response.ErrorResponseData;
|
||||||
import vip.xiaonuo.core.sms.modular.aliyun.exp.AliyunSmsException;
|
import vip.xiaonuo.core.sms.modular.aliyun.exp.AliyunSmsException;
|
||||||
import vip.xiaonuo.core.sms.modular.tencent.exp.TencentSmsException;
|
import vip.xiaonuo.core.sms.modular.tencent.exp.TencentSmsException;
|
||||||
|
import vip.xiaonuo.core.util.HttpServletUtil;
|
||||||
import vip.xiaonuo.core.util.ResponseUtil;
|
import vip.xiaonuo.core.util.ResponseUtil;
|
||||||
import org.apache.ibatis.exceptions.PersistenceException;
|
import org.apache.ibatis.exceptions.PersistenceException;
|
||||||
import org.mybatis.spring.MyBatisSystemException;
|
import org.mybatis.spring.MyBatisSystemException;
|
||||||
@ -173,8 +174,8 @@ public class GlobalExceptionHandler {
|
|||||||
@ResponseStatus(HttpStatus.NOT_FOUND)
|
@ResponseStatus(HttpStatus.NOT_FOUND)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public ErrorResponseData notFound(NoHandlerFoundException e) {
|
public ErrorResponseData notFound(NoHandlerFoundException e) {
|
||||||
log.error(">>> 资源不存在异常,请求号为:{},具体信息为:{}", RequestNoContext.get(), e.getMessage());
|
log.error(">>> 资源不存在异常,请求号为:{},具体信息为:{}", RequestNoContext.get(), e.getMessage() +",请求地址为:" + HttpServletUtil.getRequest().getRequestURI());
|
||||||
return renderJson(PermissionExceptionEnum.URL_NOT_EXIST);
|
return renderJson(PermissionExceptionEnum.URL_NOT_EXIST.getCode(), PermissionExceptionEnum.URL_NOT_EXIST.getMessage() +",请求地址为:" + HttpServletUtil.getRequest().getRequestURI());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -227,8 +228,8 @@ public class GlobalExceptionHandler {
|
|||||||
@ExceptionHandler(PermissionException.class)
|
@ExceptionHandler(PermissionException.class)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public ErrorResponseData noPermission(PermissionException e) {
|
public ErrorResponseData noPermission(PermissionException e) {
|
||||||
log.error(">>> 权限异常,请求号为:{},具体信息为:{}", RequestNoContext.get(), e.getMessage());
|
log.error(">>> 权限异常,请求号为:{},具体信息为:{}", RequestNoContext.get(), e.getMessage() +",请求地址为:" + HttpServletUtil.getRequest().getRequestURI());
|
||||||
return renderJson(e.getCode(), e.getErrorMessage());
|
return renderJson(e.getCode(), e.getErrorMessage() + ",请求地址为:" + HttpServletUtil.getRequest().getRequestURI());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,6 +25,7 @@ Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意
|
|||||||
package vip.xiaonuo.sys.modular.auth.factory;
|
package vip.xiaonuo.sys.modular.auth.factory;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.hutool.core.lang.Dict;
|
import cn.hutool.core.lang.Dict;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
@ -36,6 +37,7 @@ import vip.xiaonuo.core.exception.ServiceException;
|
|||||||
import vip.xiaonuo.core.exception.enums.ServerExceptionEnum;
|
import vip.xiaonuo.core.exception.enums.ServerExceptionEnum;
|
||||||
import vip.xiaonuo.core.pojo.login.LoginEmpInfo;
|
import vip.xiaonuo.core.pojo.login.LoginEmpInfo;
|
||||||
import vip.xiaonuo.core.pojo.login.SysLoginUser;
|
import vip.xiaonuo.core.pojo.login.SysLoginUser;
|
||||||
|
import vip.xiaonuo.core.pojo.node.LoginMenuTreeNode;
|
||||||
import vip.xiaonuo.core.tenant.consts.TenantConstants;
|
import vip.xiaonuo.core.tenant.consts.TenantConstants;
|
||||||
import vip.xiaonuo.core.tenant.context.TenantCodeHolder;
|
import vip.xiaonuo.core.tenant.context.TenantCodeHolder;
|
||||||
import vip.xiaonuo.core.tenant.context.TenantDbNameHolder;
|
import vip.xiaonuo.core.tenant.context.TenantDbNameHolder;
|
||||||
@ -44,12 +46,16 @@ import vip.xiaonuo.core.util.IpAddressUtil;
|
|||||||
import vip.xiaonuo.core.util.UaUtil;
|
import vip.xiaonuo.core.util.UaUtil;
|
||||||
import vip.xiaonuo.sys.modular.app.service.SysAppService;
|
import vip.xiaonuo.sys.modular.app.service.SysAppService;
|
||||||
import vip.xiaonuo.sys.modular.emp.service.SysEmpService;
|
import vip.xiaonuo.sys.modular.emp.service.SysEmpService;
|
||||||
|
import vip.xiaonuo.sys.modular.menu.entity.SysMenu;
|
||||||
import vip.xiaonuo.sys.modular.menu.service.SysMenuService;
|
import vip.xiaonuo.sys.modular.menu.service.SysMenuService;
|
||||||
|
import vip.xiaonuo.sys.modular.role.service.SysRoleMenuService;
|
||||||
import vip.xiaonuo.sys.modular.role.service.SysRoleService;
|
import vip.xiaonuo.sys.modular.role.service.SysRoleService;
|
||||||
import vip.xiaonuo.sys.modular.user.service.SysUserService;
|
import vip.xiaonuo.sys.modular.user.service.SysUserService;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录用户工厂类
|
* 登录用户工厂类
|
||||||
@ -69,6 +75,8 @@ public class LoginUserFactory {
|
|||||||
|
|
||||||
private static final SysRoleService sysRoleService = SpringUtil.getBean(SysRoleService.class);
|
private static final SysRoleService sysRoleService = SpringUtil.getBean(SysRoleService.class);
|
||||||
|
|
||||||
|
private static final SysRoleMenuService sysRoleMenuService = SpringUtil.getBean(SysRoleMenuService.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 填充登录用户相关信息
|
* 填充登录用户相关信息
|
||||||
*
|
*
|
||||||
@ -93,8 +101,14 @@ public class LoginUserFactory {
|
|||||||
List<Dict> roles = sysRoleService.getLoginRoles(userId);
|
List<Dict> roles = sysRoleService.getLoginRoles(userId);
|
||||||
sysLoginUser.setRoles(roles);
|
sysLoginUser.setRoles(roles);
|
||||||
|
|
||||||
|
// 获取角色id集合
|
||||||
|
List<Long> roleIdList = roles.stream().map(dict -> Convert.toLong(dict.get(CommonConstant.ID))).collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 获取菜单id集合
|
||||||
|
List<Long> menuIdList = sysRoleMenuService.getRoleMenuIdList(roleIdList);
|
||||||
|
|
||||||
// 权限信息
|
// 权限信息
|
||||||
List<String> permissions = sysMenuService.getLoginPermissions(userId);
|
List<String> permissions = sysMenuService.getLoginPermissions(userId, menuIdList);
|
||||||
sysLoginUser.setPermissions(permissions);
|
sysLoginUser.setPermissions(permissions);
|
||||||
|
|
||||||
// 数据范围信息
|
// 数据范围信息
|
||||||
@ -102,7 +116,7 @@ public class LoginUserFactory {
|
|||||||
sysLoginUser.setDataScopes(dataScopes);
|
sysLoginUser.setDataScopes(dataScopes);
|
||||||
|
|
||||||
// 具备应用信息(多系统,默认激活一个,可根据系统切换菜单),返回的结果中第一个为激活的系统
|
// 具备应用信息(多系统,默认激活一个,可根据系统切换菜单),返回的结果中第一个为激活的系统
|
||||||
List<Dict> apps = sysAppService.getLoginApps(userId);
|
List<Dict> apps = sysAppService.getLoginApps(userId, roleIdList);
|
||||||
sysLoginUser.setApps(apps);
|
sysLoginUser.setApps(apps);
|
||||||
|
|
||||||
// 如果根本没有应用信息,则没有菜单信息
|
// 如果根本没有应用信息,则没有菜单信息
|
||||||
@ -111,7 +125,11 @@ public class LoginUserFactory {
|
|||||||
} else {
|
} else {
|
||||||
//AntDesign菜单信息,根据人获取,用于登录后展示菜单树,默认获取默认激活的系统的菜单
|
//AntDesign菜单信息,根据人获取,用于登录后展示菜单树,默认获取默认激活的系统的菜单
|
||||||
String defaultActiveAppCode = apps.get(0).getStr(CommonConstant.CODE);
|
String defaultActiveAppCode = apps.get(0).getStr(CommonConstant.CODE);
|
||||||
sysLoginUser.setMenus(sysMenuService.getLoginMenusAntDesign(userId, defaultActiveAppCode));
|
List<SysMenu> loginMenus = sysMenuService.getLoginMenus(userId, defaultActiveAppCode, menuIdList);
|
||||||
|
Map<String, List<SysMenu>> collect = loginMenus.stream().collect(Collectors.groupingBy(SysMenu::getApplication));
|
||||||
|
List<SysMenu> tempList = collect.get(defaultActiveAppCode);
|
||||||
|
List<LoginMenuTreeNode> loginMenuTreeNodes = sysMenuService.convertSysMenuToLoginMenu(tempList);
|
||||||
|
sysLoginUser.setMenus(loginMenuTreeNodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
//如果开启了多租户功能,则设置当前登录用户的租户标识
|
//如果开启了多租户功能,则设置当前登录用户的租户标识
|
||||||
|
@ -28,8 +28,10 @@ import vip.xiaonuo.core.annotion.BusinessLog;
|
|||||||
import vip.xiaonuo.core.annotion.Permission;
|
import vip.xiaonuo.core.annotion.Permission;
|
||||||
import vip.xiaonuo.core.context.login.LoginContextHolder;
|
import vip.xiaonuo.core.context.login.LoginContextHolder;
|
||||||
import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum;
|
import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum;
|
||||||
|
import vip.xiaonuo.core.pojo.node.LoginMenuTreeNode;
|
||||||
import vip.xiaonuo.core.pojo.response.ResponseData;
|
import vip.xiaonuo.core.pojo.response.ResponseData;
|
||||||
import vip.xiaonuo.core.pojo.response.SuccessResponseData;
|
import vip.xiaonuo.core.pojo.response.SuccessResponseData;
|
||||||
|
import vip.xiaonuo.sys.modular.menu.entity.SysMenu;
|
||||||
import vip.xiaonuo.sys.modular.menu.param.SysMenuParam;
|
import vip.xiaonuo.sys.modular.menu.param.SysMenuParam;
|
||||||
import vip.xiaonuo.sys.modular.menu.service.SysMenuService;
|
import vip.xiaonuo.sys.modular.menu.service.SysMenuService;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -37,8 +39,11 @@ import org.springframework.web.bind.annotation.GetMapping;
|
|||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import vip.xiaonuo.sys.modular.role.service.SysRoleMenuService;
|
||||||
|
import vip.xiaonuo.sys.modular.user.service.SysUserRoleService;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统菜单控制器
|
* 系统菜单控制器
|
||||||
@ -52,6 +57,12 @@ public class SysMenuController {
|
|||||||
@Resource
|
@Resource
|
||||||
private SysMenuService sysMenuService;
|
private SysMenuService sysMenuService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysRoleMenuService sysRoleMenuService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysUserRoleService sysUserRoleService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统菜单列表(树)
|
* 系统菜单列表(树)
|
||||||
*
|
*
|
||||||
@ -156,6 +167,11 @@ public class SysMenuController {
|
|||||||
@BusinessLog(title = "系统菜单_切换", opType = LogAnnotionOpTypeEnum.TREE)
|
@BusinessLog(title = "系统菜单_切换", opType = LogAnnotionOpTypeEnum.TREE)
|
||||||
public ResponseData change(@RequestBody @Validated(SysMenuParam.change.class) SysMenuParam sysMenuParam) {
|
public ResponseData change(@RequestBody @Validated(SysMenuParam.change.class) SysMenuParam sysMenuParam) {
|
||||||
Long sysLoginUserId = LoginContextHolder.me().getSysLoginUserId();
|
Long sysLoginUserId = LoginContextHolder.me().getSysLoginUserId();
|
||||||
return new SuccessResponseData(sysMenuService.getLoginMenusAntDesign(sysLoginUserId, sysMenuParam.getApplication()));
|
List<Long> userRoleIdList = sysUserRoleService.getUserRoleIdList(sysLoginUserId);
|
||||||
|
List<Long> menuIdList = sysRoleMenuService.getRoleMenuIdList(userRoleIdList);
|
||||||
|
//转换成登录菜单
|
||||||
|
List<SysMenu> sysMenuList = sysMenuService.getLoginMenus(sysLoginUserId, sysMenuParam.getApplication(), menuIdList);
|
||||||
|
List<LoginMenuTreeNode> menuTreeNodeList = sysMenuService.convertSysMenuToLoginMenu(sysMenuList);
|
||||||
|
return new SuccessResponseData(menuTreeNodeList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,32 +44,35 @@ public interface SysMenuService extends IService<SysMenu> {
|
|||||||
* 获取用户权限相关信息
|
* 获取用户权限相关信息
|
||||||
*
|
*
|
||||||
* @param userId 用户id
|
* @param userId 用户id
|
||||||
|
* @param menuIdList 菜单id集合
|
||||||
* @return 权限集合
|
* @return 权限集合
|
||||||
* @author xuyuxiang
|
* @author xuyuxiang
|
||||||
* @date 2020/3/13 16:26
|
* @date 2020/3/13 16:26
|
||||||
*/
|
*/
|
||||||
List<String> getLoginPermissions(Long userId);
|
List<String> getLoginPermissions(Long userId, List<Long> menuIdList);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户AntDesign菜单相关信息,前端使用
|
* 获取用户AntDesign菜单相关信息,前端使用
|
||||||
*
|
*
|
||||||
* @param userId 用户id
|
* @param userId 用户id
|
||||||
* @param appCode 应用编码
|
* @param appCode 应用编码
|
||||||
|
* @param menuIdList 菜单id集合
|
||||||
* @return AntDesign菜单信息结果集
|
* @return AntDesign菜单信息结果集
|
||||||
* @author yubaoshan
|
* @author yubaoshan
|
||||||
* @date 2020/4/17 17:48
|
* @date 2020/4/17 17:48
|
||||||
*/
|
*/
|
||||||
List<LoginMenuTreeNode> getLoginMenusAntDesign(Long userId, String appCode);
|
List<SysMenu> getLoginMenus(Long userId, String appCode, List<Long> menuIdList);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户菜单所属的应用编码集合
|
* 获取用户菜单所属的应用编码集合
|
||||||
*
|
*
|
||||||
* @param userId 用户id
|
* @param userId 用户id
|
||||||
|
* @param roleIdList 角色id集合
|
||||||
* @return 用户菜单所属的应用编码集合
|
* @return 用户菜单所属的应用编码集合
|
||||||
* @author xuyuxiang
|
* @author xuyuxiang
|
||||||
* @date 2020/3/21 11:01
|
* @date 2020/3/21 11:01
|
||||||
*/
|
*/
|
||||||
List<String> getUserMenuAppCodeList(Long userId);
|
List<String> getUserMenuAppCodeList(Long userId, List<Long> roleIdList);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统菜单列表(树表)
|
* 系统菜单列表(树表)
|
||||||
@ -147,4 +150,14 @@ public interface SysMenuService extends IService<SysMenu> {
|
|||||||
* @date 2020/6/28 12:14
|
* @date 2020/6/28 12:14
|
||||||
*/
|
*/
|
||||||
boolean hasMenu(String appCode);
|
boolean hasMenu(String appCode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将SysMenu格式菜单转换为LoginMenuTreeNode菜单
|
||||||
|
*
|
||||||
|
* @author xuyuxiang
|
||||||
|
* @date 2021/6/29 13:43
|
||||||
|
* @param sysMenuList 原始菜单集合
|
||||||
|
* @return LoginMenuTreeNode菜单集合
|
||||||
|
*/
|
||||||
|
List<LoginMenuTreeNode> convertSysMenuToLoginMenu(List<SysMenu> sysMenuList);
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ package vip.xiaonuo.sys.modular.menu.service.impl;
|
|||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -59,6 +60,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统菜单service接口实现类
|
* 系统菜单service接口实现类
|
||||||
@ -83,26 +85,28 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||||||
private ResourceCache resourceCache;
|
private ResourceCache resourceCache;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getLoginPermissions(Long userId) {
|
public List<String> getLoginPermissions(Long userId, List<Long> menuIdList) {
|
||||||
Set<String> permissions = CollectionUtil.newHashSet();
|
Set<String> permissions = CollectionUtil.newHashSet();
|
||||||
List<Long> roleIdList = sysUserRoleService.getUserRoleIdList(userId);
|
|
||||||
if (ObjectUtil.isNotEmpty(roleIdList)) {
|
|
||||||
List<Long> menuIdList = sysRoleMenuService.getRoleMenuIdList(roleIdList);
|
|
||||||
if (ObjectUtil.isNotEmpty(menuIdList)) {
|
if (ObjectUtil.isNotEmpty(menuIdList)) {
|
||||||
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.in(SysMenu::getId, menuIdList).ne(SysMenu::getType, MenuTypeEnum.DIR.getCode())
|
||||||
queryWrapper.in(SysMenu::getId, menuIdList).eq(SysMenu::getType, MenuTypeEnum.BTN.getCode())
|
|
||||||
.eq(SysMenu::getStatus, CommonStatusEnum.ENABLE.getCode());
|
.eq(SysMenu::getStatus, CommonStatusEnum.ENABLE.getCode());
|
||||||
|
|
||||||
this.list(queryWrapper).forEach(sysMenu -> permissions.add(sysMenu.getPermission()));
|
this.list(queryWrapper).forEach(sysMenu -> {
|
||||||
|
if(MenuTypeEnum.BTN.getCode().equals(sysMenu.getType())) {
|
||||||
|
permissions.add(sysMenu.getPermission());
|
||||||
|
} else {
|
||||||
|
String removePrefix = StrUtil.removePrefix(sysMenu.getRouter(), SymbolConstant.LEFT_DIVIDE);
|
||||||
|
String permission = removePrefix.replaceAll(SymbolConstant.LEFT_DIVIDE, SymbolConstant.COLON);
|
||||||
|
permissions.add(permission);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return CollectionUtil.newArrayList(permissions);
|
return CollectionUtil.newArrayList(permissions);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<LoginMenuTreeNode> getLoginMenusAntDesign(Long userId, String appCode) {
|
public List<SysMenu> getLoginMenus(Long userId, String appCode, List<Long> menuIdList) {
|
||||||
List<SysMenu> sysMenuList;
|
|
||||||
//如果是超级管理员则展示所有系统权重菜单,不能展示业务权重菜单
|
//如果是超级管理员则展示所有系统权重菜单,不能展示业务权重菜单
|
||||||
SysUser sysUser = sysUserService.getById(userId);
|
SysUser sysUser = sysUserService.getById(userId);
|
||||||
Integer adminType = sysUser.getAdminType();
|
Integer adminType = sysUser.getAdminType();
|
||||||
@ -120,29 +124,19 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
//非超级管理员则获取自己角色所拥有的菜单集合
|
//非超级管理员则获取自己角色所拥有的菜单集合
|
||||||
List<Long> roleIdList = sysUserRoleService.getUserRoleIdList(userId);
|
|
||||||
if (ObjectUtil.isNotEmpty(roleIdList)) {
|
|
||||||
List<Long> menuIdList = sysRoleMenuService.getRoleMenuIdList(roleIdList);
|
|
||||||
if (ObjectUtil.isNotEmpty(menuIdList)) {
|
if (ObjectUtil.isNotEmpty(menuIdList)) {
|
||||||
queryWrapper.in(SysMenu::getId, menuIdList)
|
queryWrapper.in(SysMenu::getId, menuIdList)
|
||||||
.eq(SysMenu::getStatus, CommonStatusEnum.ENABLE.getCode())
|
.eq(SysMenu::getStatus, CommonStatusEnum.ENABLE.getCode())
|
||||||
.eq(SysMenu::getApplication, appCode)
|
.eq(SysMenu::getApplication, appCode)
|
||||||
.notIn(SysMenu::getType, MenuTypeEnum.BTN.getCode())
|
.notIn(SysMenu::getType, MenuTypeEnum.BTN.getCode())
|
||||||
.orderByAsc(SysMenu::getSort);
|
.orderByAsc(SysMenu::getSort);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
//如果角色的菜单为空,则查不到菜单
|
//如果角色的菜单为空,则查不到菜单
|
||||||
return CollectionUtil.newArrayList();
|
return CollectionUtil.newArrayList();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
//如果角色为空,则根本没菜单
|
|
||||||
return CollectionUtil.newArrayList();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//查询列表
|
//查询列表
|
||||||
sysMenuList = this.list(queryWrapper);
|
return this.list(queryWrapper);
|
||||||
//转换成登录菜单
|
|
||||||
return this.convertSysMenuToLoginMenu(sysMenuList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -151,7 +145,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||||||
* @author xuyuxiang
|
* @author xuyuxiang
|
||||||
* @date 2020/4/17 17:53
|
* @date 2020/4/17 17:53
|
||||||
*/
|
*/
|
||||||
private List<LoginMenuTreeNode> convertSysMenuToLoginMenu(List<SysMenu> sysMenuList) {
|
@Override
|
||||||
|
public List<LoginMenuTreeNode> convertSysMenuToLoginMenu(List<SysMenu> sysMenuList) {
|
||||||
List<LoginMenuTreeNode> antDesignMenuTreeNodeList = CollectionUtil.newArrayList();
|
List<LoginMenuTreeNode> antDesignMenuTreeNodeList = CollectionUtil.newArrayList();
|
||||||
sysMenuList.forEach(sysMenu -> {
|
sysMenuList.forEach(sysMenu -> {
|
||||||
LoginMenuTreeNode loginMenuTreeNode = new LoginMenuTreeNode();
|
LoginMenuTreeNode loginMenuTreeNode = new LoginMenuTreeNode();
|
||||||
@ -182,9 +177,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getUserMenuAppCodeList(Long userId) {
|
public List<String> getUserMenuAppCodeList(Long userId, List<Long> roleIdList) {
|
||||||
Set<String> appCodeSet = CollectionUtil.newHashSet();
|
Set<String> appCodeSet = CollectionUtil.newHashSet();
|
||||||
List<Long> roleIdList = sysUserRoleService.getUserRoleIdList(userId);
|
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(roleIdList)) {
|
if (ObjectUtil.isNotEmpty(roleIdList)) {
|
||||||
List<Long> menuIdList = sysRoleMenuService.getRoleMenuIdList(roleIdList);
|
List<Long> menuIdList = sysRoleMenuService.getRoleMenuIdList(roleIdList);
|
||||||
@ -193,8 +187,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||||||
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.in(SysMenu::getId, menuIdList)
|
queryWrapper.in(SysMenu::getId, menuIdList)
|
||||||
.eq(SysMenu::getStatus, CommonStatusEnum.ENABLE.getCode());
|
.eq(SysMenu::getStatus, CommonStatusEnum.ENABLE.getCode());
|
||||||
|
appCodeSet = this.list(queryWrapper).stream().map(SysMenu::getApplication).collect(Collectors.toSet());
|
||||||
this.list(queryWrapper).forEach(sysMenu -> appCodeSet.add(sysMenu.getApplication()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +55,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统角色service接口实现类
|
* 系统角色service接口实现类
|
||||||
@ -86,13 +87,13 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||||||
LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.in(SysRole::getId, roleIdList).eq(SysRole::getStatus, CommonStatusEnum.ENABLE.getCode());
|
queryWrapper.in(SysRole::getId, roleIdList).eq(SysRole::getStatus, CommonStatusEnum.ENABLE.getCode());
|
||||||
//根据角色id集合查询并返回结果
|
//根据角色id集合查询并返回结果
|
||||||
this.list(queryWrapper).forEach(sysRole -> {
|
dictList = this.list(queryWrapper).stream().map(sysRole -> {
|
||||||
Dict dict = Dict.create();
|
Dict dict = Dict.create();
|
||||||
dict.put(CommonConstant.ID, sysRole.getId());
|
dict.put(CommonConstant.ID, sysRole.getId());
|
||||||
dict.put(CommonConstant.CODE, sysRole.getCode());
|
dict.put(CommonConstant.CODE, sysRole.getCode());
|
||||||
dict.put(CommonConstant.NAME, sysRole.getName());
|
dict.put(CommonConstant.NAME, sysRole.getName());
|
||||||
dictList.add(dict);
|
return dict;
|
||||||
});
|
}).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
return dictList;
|
return dictList;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user