Pre Merge pull request !671 from 刘键(LiuJian)/无权限时返回具体的菜单名称
This commit is contained in:
commit
7791cea049
@ -86,4 +86,12 @@ public interface CacheNames {
|
||||
*/
|
||||
String ONLINE_TOKEN = "online_tokens";
|
||||
|
||||
/**
|
||||
* 菜单
|
||||
*/
|
||||
String SYS_MENU = "sys_menu#30d";
|
||||
/**
|
||||
* 菜单
|
||||
*/
|
||||
String SYS_ROLE = "sys_role#30d";
|
||||
}
|
||||
|
@ -0,0 +1,15 @@
|
||||
package org.dromara.common.core.service;
|
||||
|
||||
/**
|
||||
* 通用菜单接口
|
||||
*/
|
||||
public interface MenuService {
|
||||
/**
|
||||
* 根据菜单ID查询菜单名称
|
||||
*
|
||||
* @param menuId 用户ID
|
||||
* @return 菜单名称
|
||||
*/
|
||||
String selectMenuByPerms(String perms);
|
||||
}
|
||||
|
@ -6,5 +6,11 @@ package org.dromara.common.core.service;
|
||||
* @author AprilWind
|
||||
*/
|
||||
public interface RoleService {
|
||||
|
||||
/**
|
||||
* 根据roleKey查询角色名称
|
||||
*
|
||||
* @param roleKey roleKey
|
||||
* @return 角色名称
|
||||
*/
|
||||
String selectRoleByRoleKey(String roleKey);
|
||||
}
|
||||
|
@ -7,6 +7,9 @@ import cn.hutool.http.HttpStatus;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.service.MenuService;
|
||||
import org.dromara.common.core.service.RoleService;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
@ -25,8 +28,9 @@ public class SaTokenExceptionHandler {
|
||||
@ExceptionHandler(NotPermissionException.class)
|
||||
public R<Void> handleNotPermissionException(NotPermissionException e, HttpServletRequest request) {
|
||||
String requestURI = request.getRequestURI();
|
||||
log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage());
|
||||
return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权");
|
||||
log.error("请求地址'{}',权限码校验失败'{}-{}-{}'", requestURI, e.getLoginType(), e.getPermission(), e.getMessage());
|
||||
final String n = SpringUtils.getBean(MenuService.class).selectMenuByPerms(e.getPermission());
|
||||
return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有【" + n + "】访问权限,请联系管理员授权");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -35,8 +39,9 @@ public class SaTokenExceptionHandler {
|
||||
@ExceptionHandler(NotRoleException.class)
|
||||
public R<Void> handleNotRoleException(NotRoleException e, HttpServletRequest request) {
|
||||
String requestURI = request.getRequestURI();
|
||||
log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage());
|
||||
return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权");
|
||||
log.error("请求地址'{}',角色权限校验失败'{}-{}-{}'", requestURI, e.getLoginType(), e.getRole(), e.getMessage());
|
||||
final String n = SpringUtils.getBean(RoleService.class).selectRoleByRoleKey(e.getRole());
|
||||
return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有【" + n + "】访问权限,请联系管理员授权");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -73,4 +73,5 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
|
||||
*/
|
||||
List<Long> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
|
||||
|
||||
SysMenuVo selectVoByPerms(String perms);
|
||||
}
|
||||
|
@ -72,4 +72,6 @@ public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo> {
|
||||
*/
|
||||
List<SysRoleVo> selectRolesByUserId(Long userId);
|
||||
|
||||
SysRoleVo selectByRoleKey(String roleKey);
|
||||
|
||||
}
|
||||
|
@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.core.constant.CacheNames;
|
||||
import org.dromara.common.core.service.MenuService;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
@ -27,6 +29,7 @@ import org.dromara.system.mapper.SysRoleMapper;
|
||||
import org.dromara.system.mapper.SysRoleMenuMapper;
|
||||
import org.dromara.system.mapper.SysTenantPackageMapper;
|
||||
import org.dromara.system.service.ISysMenuService;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
@ -38,7 +41,7 @@ import java.util.*;
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class SysMenuServiceImpl implements ISysMenuService {
|
||||
public class SysMenuServiceImpl implements ISysMenuService, MenuService {
|
||||
|
||||
private final SysMenuMapper baseMapper;
|
||||
private final SysRoleMapper roleMapper;
|
||||
@ -169,11 +172,15 @@ public class SysMenuServiceImpl implements ISysMenuService {
|
||||
if (tenantPackage.getMenuCheckStrictly()) {
|
||||
parentIds = baseMapper.selectObjs(new LambdaQueryWrapper<SysMenu>()
|
||||
.select(SysMenu::getParentId)
|
||||
.in(SysMenu::getMenuId, menuIds), x -> {return Convert.toLong(x);});
|
||||
.in(SysMenu::getMenuId, menuIds), x -> {
|
||||
return Convert.toLong(x);
|
||||
});
|
||||
}
|
||||
return baseMapper.selectObjs(new LambdaQueryWrapper<SysMenu>()
|
||||
.in(SysMenu::getMenuId, menuIds)
|
||||
.notIn(CollUtil.isNotEmpty(parentIds), SysMenu::getMenuId, parentIds), x -> {return Convert.toLong(x);});
|
||||
.notIn(CollUtil.isNotEmpty(parentIds), SysMenu::getMenuId, parentIds), x -> {
|
||||
return Convert.toLong(x);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -369,4 +376,16 @@ public class SysMenuServiceImpl implements ISysMenuService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据菜单ID查询菜单信息
|
||||
*
|
||||
* @param menuId 用户ID
|
||||
* @return 菜单信息
|
||||
*/
|
||||
@Cacheable(cacheNames = CacheNames.SYS_MENU, key = "#perms")
|
||||
@Override
|
||||
public String selectMenuByPerms(String perms) {
|
||||
final SysMenuVo menuVo = baseMapper.selectVoByPerms(perms);
|
||||
return menuVo.getMenuName();
|
||||
}
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.constant.CacheNames;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.core.constant.CacheNames;
|
||||
import org.dromara.common.core.constant.TenantConstants;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
@ -36,6 +37,7 @@ import org.dromara.system.mapper.SysRoleMenuMapper;
|
||||
import org.dromara.system.mapper.SysUserRoleMapper;
|
||||
import org.dromara.system.service.ISysRoleService;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -549,4 +551,17 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据roleKey查询角色名称
|
||||
*
|
||||
* @param roleKey roleKey
|
||||
* @return 角色名称
|
||||
*/
|
||||
@Cacheable(cacheNames = CacheNames.SYS_ROLE, key = "#roleKey")
|
||||
@Override
|
||||
public String selectRoleByRoleKey(String roleKey) {
|
||||
final SysRoleVo roleVo = baseMapper.selectByRoleKey(roleKey);
|
||||
return roleVo.getRoleName();
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.system.mapper.SysMenuMapper">
|
||||
|
||||
<resultMap type="org.dromara.system.domain.SysMenu" id="SysMenuResult">
|
||||
</resultMap>
|
||||
|
||||
<resultMap type="org.dromara.system.domain.SysMenu" id="SysMenuResult"/>
|
||||
<select id="selectMenuListByUserId" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query_param, m.visible, m.status,
|
||||
m.perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
|
||||
select distinct m.menu_id,
|
||||
m.parent_id,
|
||||
m.menu_name,
|
||||
m.path,
|
||||
m.component,
|
||||
m.query_param,
|
||||
m.visible,
|
||||
m.status,
|
||||
m.perms,
|
||||
m.is_frame,
|
||||
m.is_cache,
|
||||
m.menu_type,
|
||||
m.icon,
|
||||
m.order_num,
|
||||
m.create_time
|
||||
from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
left join sys_role r on rm.role_id = r.role_id
|
||||
${ew.getCustomSqlSegment}
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
left join sys_role r on rm.role_id = r.role_id
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
<select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
|
||||
@ -64,7 +75,28 @@
|
||||
select distinct m.perms
|
||||
from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
where m.status = '0' and rm.role_id = #{roleId}
|
||||
where m.status = '0'
|
||||
and rm.role_id = #{roleId}
|
||||
</select>
|
||||
|
||||
<select id="selectVoByPerms" resultType="org.dromara.system.domain.vo.SysMenuVo">
|
||||
select distinct m.menu_id,
|
||||
m.parent_id,
|
||||
m.menu_name,
|
||||
m.path,
|
||||
m.component,
|
||||
m.query_param,
|
||||
m.visible,
|
||||
m.status,
|
||||
m.perms,
|
||||
m.is_frame,
|
||||
m.is_cache,
|
||||
m.menu_type,
|
||||
m.icon,
|
||||
m.order_num,
|
||||
m.create_time
|
||||
from sys_menu m
|
||||
where m.perms = #{perms}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
@ -56,4 +56,17 @@
|
||||
WHERE r.del_flag = '0' and r.role_id = #{roleId}
|
||||
</select>
|
||||
|
||||
<select id="selectByRoleKey" resultType="org.dromara.system.domain.vo.SysRoleVo">
|
||||
select r.role_id,
|
||||
r.role_name,
|
||||
r.role_key,
|
||||
r.role_sort,
|
||||
r.data_scope,
|
||||
r.status,
|
||||
r.remark,
|
||||
r.create_time
|
||||
from sys_role r
|
||||
WHERE r.role_key = #{roleKey}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
Loading…
x
Reference in New Issue
Block a user