|
@@ -5,18 +5,13 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
|
|
import com.xy.collections.list.JArrayList;
|
|
|
import com.xy.collections.list.JList;
|
|
|
import com.xy.collections.map.JMap;
|
|
|
-import com.xy.consts.CommConsts;
|
|
|
import com.xy.entity.*;
|
|
|
-import com.xy.entity.join.SysMenuJoinSysRoleMenu;
|
|
|
-import com.xy.error.CommRuntimeException;
|
|
|
import com.xy.mapper.SysDeptMapper;
|
|
|
import com.xy.mapper.SysMenuMapper;
|
|
|
import com.xy.mapper.SysRoleMapper;
|
|
|
import com.xy.mapper.SysSystemMapper;
|
|
|
import com.xy.utils.*;
|
|
|
import icu.mhb.mybatisplus.plugln.core.JoinLambdaWrapper;
|
|
|
-import lombok.Data;
|
|
|
-import lombok.experimental.Accessors;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.context.request.RequestContextHolder;
|
|
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
@@ -24,22 +19,12 @@ import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
|
|
/**
|
|
|
* 权限系统redis工具类
|
|
|
*/
|
|
|
@Component
|
|
|
-public class RedisCache {
|
|
|
-
|
|
|
- private static RedisService<List<CacheEntity>> getRedisService() {
|
|
|
- return SpringBeanUtils.getBean(RedisService.class);
|
|
|
- }
|
|
|
-
|
|
|
- private static String getKey(Long loginId) {
|
|
|
- return String.format("%s:%d", "menu", loginId);
|
|
|
- }
|
|
|
+public class RedisCache extends AuthorizeUtils {
|
|
|
|
|
|
/**
|
|
|
* 缓存业务系统权限到redis
|
|
@@ -51,7 +36,7 @@ public class RedisCache {
|
|
|
SysRoleMapper sysRoleMapper = SpringBeanUtils.getBean(SysRoleMapper.class);
|
|
|
SysDeptMapper sysDeptMapper = SpringBeanUtils.getBean(SysDeptMapper.class);
|
|
|
SysMenuMapper sysMenuMapper = SpringBeanUtils.getBean(SysMenuMapper.class);
|
|
|
- RedisService<List<RedisCache.CacheEntity>> roleMenuRedisService = getRedisService();
|
|
|
+ RedisService<List<AuthorizeUtils.CacheEntity>> roleMenuRedisService = getRedisService();
|
|
|
//获取登录人所有系统
|
|
|
JoinLambdaWrapper<SysSystem> sysSystemsJoinLambdaWrapper = new JoinLambdaWrapper<>(SysSystem.class)
|
|
|
.eq(SysSystem::getStatus, true)
|
|
@@ -109,9 +94,9 @@ public class RedisCache {
|
|
|
List<SysMenuJoinSysRoleMenu> sysMenus = sysMenuMapper.joinSelectList(sysMenuJoinLambdaWrapper, SysMenuJoinSysRoleMenu.class);
|
|
|
JMap<Long, List<SysMenuJoinSysRoleMenu>> sysMenuMaps = new JArrayList<>(sysMenus).toMap(SysMenuJoinSysRoleMenu::getRoleId).group();
|
|
|
sysSystems.forEach(sysSystem -> {
|
|
|
- List<RedisCache.CacheEntity> cacheEntitys = new ArrayList<>();
|
|
|
+ List<AuthorizeUtils.CacheEntity> cacheEntitys = new ArrayList<>();
|
|
|
sysRoles.forEach(sysRole -> {
|
|
|
- RedisCache.CacheEntity cacheEntity = new RedisCache.CacheEntity()
|
|
|
+ AuthorizeUtils.CacheEntity cacheEntity = new AuthorizeUtils.CacheEntity()
|
|
|
.setRoleId(sysRole.getId())
|
|
|
.setRoleCode(sysRole.getCode())
|
|
|
.setList(sysMenuMaps.get(sysRole.getId()));
|
|
@@ -121,105 +106,6 @@ public class RedisCache {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取菜单
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<SysMenuJoinSysRoleMenu> getMenu(Long loginId, Long systemId) {
|
|
|
- JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>();
|
|
|
- //获取redis缓存
|
|
|
- List<RedisCache.CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
- if (!Emptys.check(cacheEntities)) {
|
|
|
- return sysMenuJoinSysRoleMenus;
|
|
|
- }
|
|
|
- //角色菜单累加
|
|
|
- cacheEntities.forEach(cacheEntity -> sysMenuJoinSysRoleMenus.addAll(cacheEntity.getList()));
|
|
|
- //去重
|
|
|
- sysMenuJoinSysRoleMenus.comparing(SysMenuJoinSysRoleMenu::getId);
|
|
|
- return sysMenuJoinSysRoleMenus;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取菜单
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<SysMenuJoinSysRoleMenu> getMenu(Long systemId) {
|
|
|
- return getMenu(SaTokenUtils.getId(Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取菜单树
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<SysMenuJoinSysRoleMenu> getMenuTree(Long loginId, Long systemId) {
|
|
|
- //获取菜单
|
|
|
- JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>(getMenu(loginId, systemId));
|
|
|
- //生成树
|
|
|
- JList<SysMenuJoinSysRoleMenu> tops = sysMenuJoinSysRoleMenus.filter().isNull(SysMenuJoinSysRoleMenu::getPaterId).list();
|
|
|
- for (SysMenuJoinSysRoleMenu top : tops) {
|
|
|
- List<SysMenuJoinSysRoleMenu> tree = Beans.tree(top, sysMenuJoinSysRoleMenus, SysMenuJoinSysRoleMenu::getId, SysMenuJoinSysRoleMenu::getPaterId, SysMenuJoinSysRoleMenu::getSonSysMenu);
|
|
|
- top.setSonSysMenu(tree);
|
|
|
- }
|
|
|
- return tops;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取菜单树
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<SysMenuJoinSysRoleMenu> getMenuTree(Long systemId) {
|
|
|
- return getMenuTree(SaTokenUtils.getId(Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 判断数据查询权限
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @param systemId 系统id
|
|
|
- * @param systemId 接口uri
|
|
|
- * @return true=管理员数据查询权限 false=普通查询权限
|
|
|
- */
|
|
|
- public static boolean getDataAuth(Long loginId, Long systemId, String uri) {
|
|
|
- //获取redis缓存
|
|
|
- List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
- if (!Emptys.check(cacheEntities)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- //遍历角色
|
|
|
- for (CacheEntity cacheEntity : cacheEntities) {
|
|
|
- //根据 接口uri和管理员数据查询权限=true 查找角色菜单,找到则有管理员数据查询权限,反之普通查询权限
|
|
|
- SysMenuJoinSysRoleMenu sysMenuJoinSysRoleMenu = new JArrayList<>(cacheEntity.getList()).filter()
|
|
|
- .eq(SysMenuJoinSysRoleMenu::getInterfaceUri, uri)
|
|
|
- .eq(SysMenuJoinSysRoleMenu::getSelectIsAdmin, true)
|
|
|
- .object();
|
|
|
- if (sysMenuJoinSysRoleMenu != null) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 判断数据查询权限
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @param systemId 接口uri
|
|
|
- * @return true=管理员数据查询权限 false=普通查询权限
|
|
|
- */
|
|
|
- public static boolean getDataAuth(Long systemId, String uri) {
|
|
|
- return getDataAuth(SaTokenUtils.getId(Long.class), systemId, uri);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 判断数据查询权限
|
|
|
*
|
|
@@ -248,186 +134,4 @@ public class RedisCache {
|
|
|
return getDataAuth(SaTokenUtils.getId(Long.class), systemId, lambdaQueryWrapper, function);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取所有系统ID
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<Long> getSystemIds(Long loginId) {
|
|
|
- Map<String, List<CacheEntity>> map = getRedisService().getMap(getKey(loginId));
|
|
|
- if (!Emptys.check(map)) {
|
|
|
- return new ArrayList<>();
|
|
|
- }
|
|
|
- List<Long> list = new ArrayList<>(map.size());
|
|
|
- map.forEach((s, cacheEntities) -> list.add(Long.parseLong(s)));
|
|
|
- return list;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取所有系统ID
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<Long> getSystemIds() {
|
|
|
- return getSystemIds(SaTokenUtils.getId(Long.class));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检验系统ID是否属于当前登录人
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static Boolean checkSystemId(Long loginId, Long systemId) {
|
|
|
- Map<String, List<CacheEntity>> map = getRedisService().getMap(getKey(loginId));
|
|
|
- return map.containsKey(systemId.toString());
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检验系统ID是否属于当前登录人
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static Boolean checkSystemId(Long systemId) {
|
|
|
- return checkSystemId(SaTokenUtils.getId(Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检验系统ID是否属于当前登录人并抛出异常
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static void checkSystemIdByException(Long loginId, Long systemId) {
|
|
|
- Boolean aBoolean = checkSystemId(loginId, systemId);
|
|
|
- if (!aBoolean) {
|
|
|
- throw new CommRuntimeException("系统不存在");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检验系统ID是否属于当前登录人并抛出异常
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static void checkSystemIdByException(Long systemId) {
|
|
|
- checkSystemIdByException(SaTokenUtils.getId(Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取所有角色ID
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<Long> getRoleIds(Long loginId, Long systemId) {
|
|
|
- List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
- if (!Emptys.check(cacheEntities)) {
|
|
|
- return new ArrayList<>();
|
|
|
- }
|
|
|
- List<Long> list = new ArrayList<>(cacheEntities.size());
|
|
|
- cacheEntities.forEach(cacheEntity -> list.add(Long.parseLong(cacheEntity.getRoleId().toString())));
|
|
|
- return list;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取所有角色ID
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<Long> getRoleIds(Long systemId) {
|
|
|
- return getRoleIds(SaTokenUtils.getId(Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 是否是管理员
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static Boolean isAdmin(Long loginId, Long systemId) {
|
|
|
- List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
- if (!Emptys.check(cacheEntities)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- for (CacheEntity cacheEntity : cacheEntities) {
|
|
|
- if (CommConsts.ADMIN_ROLE_CODE.equals(cacheEntity.getRoleCode())) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 是否是管理员
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static Boolean isAdmin(Long systemId) {
|
|
|
- return isAdmin(SaTokenUtils.getId(Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取所有菜单接口uri
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<String> getMenuInterfaceUri(Long loginId, Long systemId) {
|
|
|
- JList<String> list = new JArrayList<>();
|
|
|
- //获取redis缓存
|
|
|
- List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
- if (!Emptys.check(cacheEntities)) {
|
|
|
- return list;
|
|
|
- }
|
|
|
- //遍历角色
|
|
|
- for (CacheEntity cacheEntity : cacheEntities) {
|
|
|
- List<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = cacheEntity.getList();
|
|
|
- list.addAll(new JArrayList<>(sysMenuJoinSysRoleMenus).filter()
|
|
|
- .isNotNull(SysMenuJoinSysRoleMenu::getInterfaceUri).list()
|
|
|
- .getProperty(SysMenuJoinSysRoleMenu::getInterfaceUri)
|
|
|
- );
|
|
|
- }
|
|
|
- return list.comparing();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取所有菜单接口uri
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<String> getMenuInterfaceUri(Long systemId) {
|
|
|
- return getMenuInterfaceUri(SaTokenUtils.getId(Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
- @Data
|
|
|
- @Accessors(chain = true)
|
|
|
- public static class CacheEntity {
|
|
|
-
|
|
|
- /**
|
|
|
- * 角色id
|
|
|
- */
|
|
|
- private Long roleId;
|
|
|
-
|
|
|
- /**
|
|
|
- * 角色标识
|
|
|
- */
|
|
|
- private String roleCode;
|
|
|
-
|
|
|
- /**
|
|
|
- * 菜单集合
|
|
|
- */
|
|
|
- private List<SysMenuJoinSysRoleMenu> list;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
}
|