|
@@ -1,6 +1,7 @@
|
|
package com.xy.redis;
|
|
package com.xy.redis;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
|
import com.xy.collections.list.JArrayList;
|
|
import com.xy.collections.list.JArrayList;
|
|
import com.xy.collections.list.JList;
|
|
import com.xy.collections.list.JList;
|
|
import com.xy.collections.map.JMap;
|
|
import com.xy.collections.map.JMap;
|
|
@@ -9,10 +10,7 @@ import com.xy.entity.join.SysMenuJoinSysRoleMenu;
|
|
import com.xy.mapper.SysMenuMapper;
|
|
import com.xy.mapper.SysMenuMapper;
|
|
import com.xy.mapper.SysRoleMapper;
|
|
import com.xy.mapper.SysRoleMapper;
|
|
import com.xy.mapper.SysSystemMapper;
|
|
import com.xy.mapper.SysSystemMapper;
|
|
-import com.xy.utils.Beans;
|
|
|
|
-import com.xy.utils.Emptys;
|
|
|
|
-import com.xy.utils.RedisService;
|
|
|
|
-import com.xy.utils.SpringBeanUtils;
|
|
|
|
|
|
+import com.xy.utils.*;
|
|
import icu.mhb.mybatisplus.plugln.core.JoinLambdaWrapper;
|
|
import icu.mhb.mybatisplus.plugln.core.JoinLambdaWrapper;
|
|
import lombok.Data;
|
|
import lombok.Data;
|
|
import lombok.experimental.Accessors;
|
|
import lombok.experimental.Accessors;
|
|
@@ -20,10 +18,23 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * 权限系统redis工具类
|
|
|
|
+ */
|
|
@Component
|
|
@Component
|
|
public class RedisCache {
|
|
public class RedisCache {
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 权限系统默认系统ID,代表本系统
|
|
|
|
+ */
|
|
|
|
+ private static final String DEFAULT_STSTEM_ID = "1";
|
|
|
|
+
|
|
|
|
+ private static RedisService<List<CacheEntity>> getRedisService() {
|
|
|
|
+ return SpringBeanUtils.getBean(RedisService.class);
|
|
|
|
+ }
|
|
|
|
+
|
|
private static String getKey(Long loginId) {
|
|
private static String getKey(Long loginId) {
|
|
return String.format("%s:%d", "menu", loginId);
|
|
return String.format("%s:%d", "menu", loginId);
|
|
}
|
|
}
|
|
@@ -37,7 +48,7 @@ public class RedisCache {
|
|
SysSystemMapper sysSystemMapper = SpringBeanUtils.getBean(SysSystemMapper.class);
|
|
SysSystemMapper sysSystemMapper = SpringBeanUtils.getBean(SysSystemMapper.class);
|
|
SysRoleMapper sysRoleMapper = SpringBeanUtils.getBean(SysRoleMapper.class);
|
|
SysRoleMapper sysRoleMapper = SpringBeanUtils.getBean(SysRoleMapper.class);
|
|
SysMenuMapper sysMenuMapper = SpringBeanUtils.getBean(SysMenuMapper.class);
|
|
SysMenuMapper sysMenuMapper = SpringBeanUtils.getBean(SysMenuMapper.class);
|
|
- RedisService<List<CacheEntity>> roleMenuRedisService = SpringBeanUtils.getBean(RedisService.class);
|
|
|
|
|
|
+ RedisService<List<CacheEntity>> roleMenuRedisService = getRedisService();
|
|
//获取登录人所有系统
|
|
//获取登录人所有系统
|
|
List<SysSystem> sysSystems = sysSystemMapper.selectList(new LambdaQueryWrapper<SysSystem>()
|
|
List<SysSystem> sysSystems = sysSystemMapper.selectList(new LambdaQueryWrapper<SysSystem>()
|
|
.eq(SysSystem::getSysUserId, loginId)
|
|
.eq(SysSystem::getSysUserId, loginId)
|
|
@@ -82,21 +93,31 @@ public class RedisCache {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 获取菜单树
|
|
|
|
|
|
+ * 获取菜单
|
|
*
|
|
*
|
|
- * @param loginId 登录id
|
|
|
|
- * @param systemId 系统id
|
|
|
|
|
|
+ * @param loginId 登录id
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- public static List<SysMenuJoinSysRoleMenu> getMenuTree(Long loginId, Long systemId) {
|
|
|
|
|
|
+ public static List<SysMenuJoinSysRoleMenu> getMenu(Long loginId) {
|
|
//获取redis缓存
|
|
//获取redis缓存
|
|
- RedisService<List<CacheEntity>> roleMenuRedisService = SpringBeanUtils.getBean(RedisService.class);
|
|
|
|
- List<CacheEntity> cacheEntities = roleMenuRedisService.getMap(getKey(loginId), systemId.toString());
|
|
|
|
|
|
+ List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), DEFAULT_STSTEM_ID);
|
|
//角色菜单累加
|
|
//角色菜单累加
|
|
JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>();
|
|
JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>();
|
|
cacheEntities.forEach(cacheEntity -> sysMenuJoinSysRoleMenus.addAll(cacheEntity.getList()));
|
|
cacheEntities.forEach(cacheEntity -> sysMenuJoinSysRoleMenus.addAll(cacheEntity.getList()));
|
|
//去重
|
|
//去重
|
|
sysMenuJoinSysRoleMenus.comparing(SysMenuJoinSysRoleMenu::getId);
|
|
sysMenuJoinSysRoleMenus.comparing(SysMenuJoinSysRoleMenu::getId);
|
|
|
|
+ return sysMenuJoinSysRoleMenus;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取菜单树
|
|
|
|
+ *
|
|
|
|
+ * @param loginId 登录id
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public static List<SysMenuJoinSysRoleMenu> getMenuTree(Long loginId) {
|
|
|
|
+ //获取菜单
|
|
|
|
+ JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>(getMenu(loginId));
|
|
//生成树
|
|
//生成树
|
|
JList<SysMenuJoinSysRoleMenu> tops = sysMenuJoinSysRoleMenus.filter().isNull(SysMenuJoinSysRoleMenu::getPaterId).list();
|
|
JList<SysMenuJoinSysRoleMenu> tops = sysMenuJoinSysRoleMenus.filter().isNull(SysMenuJoinSysRoleMenu::getPaterId).list();
|
|
for (SysMenuJoinSysRoleMenu top : tops) {
|
|
for (SysMenuJoinSysRoleMenu top : tops) {
|
|
@@ -106,6 +127,73 @@ public class RedisCache {
|
|
return tops;
|
|
return tops;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 判断数据查询权限
|
|
|
|
+ *
|
|
|
|
+ * @param loginId 登录id
|
|
|
|
+ * @param dataUri 数据接口uri
|
|
|
|
+ * @return true=管理员数据查询权限 false=普通查询权限
|
|
|
|
+ */
|
|
|
|
+ public static boolean getDataAuth(Long loginId, String dataUri) {
|
|
|
|
+ //获取redis缓存
|
|
|
|
+ List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), DEFAULT_STSTEM_ID);
|
|
|
|
+ //遍历角色
|
|
|
|
+ for (CacheEntity cacheEntity : cacheEntities) {
|
|
|
|
+ //根据 接口uri和管理员数据查询权限=true 查找角色菜单,找到则有管理员数据查询权限,反之普通查询权限
|
|
|
|
+ SysMenuJoinSysRoleMenu sysMenuJoinSysRoleMenu = new JArrayList<>(cacheEntity.getList()).filter()
|
|
|
|
+ .eq(SysMenuJoinSysRoleMenu::getInterfaceUri, dataUri)
|
|
|
|
+ .eq(SysMenuJoinSysRoleMenu::getSelectIsAdmin, true)
|
|
|
|
+ .object();
|
|
|
|
+ if (sysMenuJoinSysRoleMenu != null) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 判断数据查询权限
|
|
|
|
+ *
|
|
|
|
+ * @param loginId 登录id
|
|
|
|
+ * @param dataUri 数据接口uri
|
|
|
|
+ * @param lambdaQueryWrapper 查询构造器
|
|
|
|
+ * @param function 普通查询权限时,条件lambda引用字段
|
|
|
|
+ * @return true=管理员数据查询权限 false=普通查询权限
|
|
|
|
+ */
|
|
|
|
+ public static <T> boolean getDataAuth(Long loginId, String dataUri, LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
|
|
|
|
+ boolean dataAuth = getDataAuth(loginId, dataUri);
|
|
|
|
+ if (!dataAuth) {
|
|
|
|
+ lambdaQueryWrapper.eq(function, loginId);
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取所有系统ID
|
|
|
|
+ *
|
|
|
|
+ * @param loginId 登录id
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public static List<Long> getSystemIds(Long loginId) {
|
|
|
|
+ Map<String, List<CacheEntity>> map = getRedisService().getMap(getKey(loginId));
|
|
|
|
+ List<Long> list = new ArrayList<>(map.size());
|
|
|
|
+ map.forEach((s, cacheEntities) -> list.add(Long.parseLong(s)));
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取所有角色ID
|
|
|
|
+ *
|
|
|
|
+ * @param loginId 登录id
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public static List<Long> getRoleIds(Long loginId) {
|
|
|
|
+ List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), DEFAULT_STSTEM_ID);
|
|
|
|
+ List<Long> list = new ArrayList<>(cacheEntities.size());
|
|
|
|
+ cacheEntities.forEach(cacheEntity -> list.add(Long.parseLong(cacheEntity.getRoleId().toString())));
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
|
|
+
|
|
@Data
|
|
@Data
|
|
@Accessors(chain = true)
|
|
@Accessors(chain = true)
|
|
public static class CacheEntity {
|
|
public static class CacheEntity {
|