李进 преди 2 години
родител
ревизия
ea04e52a86

+ 22 - 0
authorize-api-service/src/main/java/com/xy/entity/SysDeptRole.java

@@ -0,0 +1,22 @@
+package com.xy.entity;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 部门角色表
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-09
+ */
+@Data
+@Accessors(chain = true)
+public class SysDeptRole {
+
+    private Long deptId;
+
+    private Long roleId;
+
+}

+ 15 - 0
authorize-api-service/src/main/java/com/xy/mapper/SysDeptRoleMapper.java

@@ -0,0 +1,15 @@
+package com.xy.mapper;
+
+import com.xy.entity.SysDeptRole;
+import icu.mhb.mybatisplus.plugln.base.mapper.JoinBaseMapper;
+
+/**
+ * <p>
+ * 部门角色表 Mapper 接口
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-09
+ */
+public interface SysDeptRoleMapper extends JoinBaseMapper<SysDeptRole> {
+}

+ 146 - 15
authorize-api-service/src/main/java/com/xy/redis/SystemRedisCache.java → authorize-api-service/src/main/java/com/xy/redis/RedisCache.java

@@ -7,6 +7,7 @@ import com.xy.collections.list.JList;
 import com.xy.collections.map.JMap;
 import com.xy.entity.*;
 import com.xy.entity.join.SysMenuJoinSysRoleMenu;
+import com.xy.mapper.SysDeptMapper;
 import com.xy.mapper.SysMenuMapper;
 import com.xy.mapper.SysRoleMapper;
 import com.xy.mapper.SysSystemMapper;
@@ -30,12 +31,12 @@ import java.util.Map;
  * 权限系统redis工具类
  */
 @Component
-public class SystemRedisCache {
+public class RedisCache {
 
     /**
      * 权限系统默认系统ID,代表本系统
      */
-    private static final String DEFAULT_STSTEM_ID = "1";
+    private static final Long DEFAULT_STSTEM_ID = 1L;
 
     private static RedisService<List<CacheEntity>> getRedisService() {
         return SpringBeanUtils.getBean(RedisService.class);
@@ -46,11 +47,11 @@ public class SystemRedisCache {
     }
 
     /**
-     * 缓存权限相关到redis
+     * 缓存权限系统权限到redis
      *
      * @param loginId 登录id
      */
-    public static void cache(Long loginId) {
+    public static void systemCache(Long loginId) {
         SysSystemMapper sysSystemMapper = SpringBeanUtils.getBean(SysSystemMapper.class);
         SysRoleMapper sysRoleMapper = SpringBeanUtils.getBean(SysRoleMapper.class);
         SysMenuMapper sysMenuMapper = SpringBeanUtils.getBean(SysMenuMapper.class);
@@ -99,14 +100,92 @@ public class SystemRedisCache {
     }
 
     /**
-     * 获取菜单
+     * 缓存业务系统权限到redis
      *
      * @param loginId 登录id
+     */
+    public static void workCache(Long loginId) {
+        SysSystemMapper sysSystemMapper = SpringBeanUtils.getBean(SysSystemMapper.class);
+        SysRoleMapper sysRoleMapper = SpringBeanUtils.getBean(SysRoleMapper.class);
+        SysDeptMapper sysDeptMapper = SpringBeanUtils.getBean(SysDeptMapper.class);
+        SysMenuMapper sysMenuMapper = SpringBeanUtils.getBean(SysMenuMapper.class);
+        RedisService<List<RedisCache.CacheEntity>> roleMenuRedisService = getRedisService();
+        //获取登录人所有系统
+        List<SysSystem> sysSystems = sysSystemMapper.selectList(new LambdaQueryWrapper<SysSystem>()
+                .eq(SysSystem::getSysUserId, loginId)
+                .eq(SysSystem::getStatus, true)
+        );
+        if (!Emptys.check(sysSystems)) {
+            return;
+        }
+        //获取登录人所有角色
+        JoinLambdaWrapper<SysRole> sysRoleJoinLambdaWrapper = new JoinLambdaWrapper<>(SysRole.class)
+                .eq(SysRole::getStatus, true)
+                .innerJoin(SysUserRole.class, SysUserRole::getRoleId, SysRole::getId)
+                .eq(SysUserRole::getWorkUserId, loginId)
+                .end();
+        List<SysRole> sysRoles = sysRoleMapper.joinSelectList(sysRoleJoinLambdaWrapper, SysRole.class);
+        JList<Long> sysRoleIds = new JArrayList<>(sysRoles).getProperty(SysRole::getId);
+        if (sysRoleIds.size() == 0) {
+            return;
+        }
+        //获取登录人所有部门
+        JoinLambdaWrapper<SysDept> sysDeptJoinLambdaWrapper = new JoinLambdaWrapper<>(SysDept.class)
+                .eq(SysDept::getStatus, true)
+                .innerJoin(SysUserDept.class, SysUserDept::getDeptId, SysUserDept::getId)
+                .eq(SysUserDept::getWorkUserId, loginId)
+                .end();
+        List<SysDept> sysDepts = sysDeptMapper.joinSelectList(sysDeptJoinLambdaWrapper, SysDept.class);
+        JList<Long> sysDeptsIds = new JArrayList<>(sysDepts).getProperty(SysDept::getId);
+        //获取登录人所有部门角色
+        if (sysDeptsIds.size() > 0) {
+            sysRoleJoinLambdaWrapper = new JoinLambdaWrapper<>(SysRole.class)
+                    .eq(SysRole::getStatus, true)
+                    .innerJoin(SysDeptRole.class, SysDeptRole::getRoleId, SysRole::getId)
+                    .in(SysDeptRole::getDeptId, sysDeptsIds)
+                    .end();
+            List<SysRole> sysRoles2 = sysRoleMapper.joinSelectList(sysRoleJoinLambdaWrapper, SysRole.class);
+            JList<Long> sysRoleIds2 = new JArrayList<>(sysRoles2).getProperty(SysRole::getId);
+            if (sysRoleIds2.size() > 0) {
+                sysRoleIds.addAll(sysRoleIds2);
+                //去重
+                sysRoleIds = sysRoleIds.comparing();
+            }
+        }
+        //获取登录人所有角色菜单
+        JoinLambdaWrapper<SysMenu> sysMenuJoinLambdaWrapper = new JoinLambdaWrapper<>(SysMenu.class)
+                .eq(SysMenu::getStatus, true)
+                .innerJoin(SysRoleMenu.class, SysRoleMenu::getMenuId, SysMenu::getId)
+                .selectAs(cb -> cb
+                        .add(SysRoleMenu::getSelectIsAdmin)
+                        .add(SysRoleMenu::getRoleId)
+                )
+                .in(SysRoleMenu::getRoleId, sysRoleIds)
+                .end();
+        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<>();
+            sysRoles.forEach(sysRole -> {
+                RedisCache.CacheEntity cacheEntity = new RedisCache.CacheEntity()
+                        .setRoleId(sysRole.getId())
+                        .setList(sysMenuMaps.get(sysRole.getId()));
+                cacheEntitys.add(cacheEntity);
+            });
+            roleMenuRedisService.setMap(getKey(loginId), sysSystem.getId().toString(), cacheEntitys);
+        });
+    }
+
+    /**
+     * 获取菜单
+     *
+     * @param loginId  登录id
+     * @param systemId 系统id
      * @return
      */
-    public static List<SysMenuJoinSysRoleMenu> getMenu(Long loginId) {
+    public static List<SysMenuJoinSysRoleMenu> getMenu(Long loginId, Long systemId) {
         //获取redis缓存
-        List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), DEFAULT_STSTEM_ID);
+        List<RedisCache.CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
         //角色菜单累加
         JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>();
         cacheEntities.forEach(cacheEntity -> sysMenuJoinSysRoleMenus.addAll(cacheEntity.getList()));
@@ -115,15 +194,25 @@ public class SystemRedisCache {
         return sysMenuJoinSysRoleMenus;
     }
 
+    /**
+     * 获取菜单
+     *
+     * @param loginId 登录id
+     * @return
+     */
+    public static List<SysMenuJoinSysRoleMenu> getMenu(Long loginId) {
+        return getMenu(loginId, DEFAULT_STSTEM_ID);
+    }
+
     /**
      * 获取菜单树
      *
      * @param loginId 登录id
      * @return
      */
-    public static List<SysMenuJoinSysRoleMenu> getMenuTree(Long loginId) {
+    public static List<SysMenuJoinSysRoleMenu> getMenuTree(Long loginId, Long systemId) {
         //获取菜单
-        JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>(getMenu(loginId));
+        JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>(getMenu(loginId, systemId));
         //生成树
         JList<SysMenuJoinSysRoleMenu> tops = sysMenuJoinSysRoleMenus.filter().isNull(SysMenuJoinSysRoleMenu::getPaterId).list();
         for (SysMenuJoinSysRoleMenu top : tops) {
@@ -133,16 +222,26 @@ public class SystemRedisCache {
         return tops;
     }
 
+    /**
+     * 获取菜单树
+     *
+     * @param loginId 登录id
+     * @return
+     */
+    public static List<SysMenuJoinSysRoleMenu> getMenuTree(Long loginId) {
+        return getMenuTree(loginId, DEFAULT_STSTEM_ID);
+    }
+
     /**
      * 判断数据查询权限
      *
      * @param loginId 登录id
      * @return true=管理员数据查询权限 false=普通查询权限
      */
-    public static boolean getDataAuth(Long loginId) {
+    public static boolean getDataAuth(Long loginId, Long systemId) {
         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
         //获取redis缓存
-        List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), DEFAULT_STSTEM_ID);
+        List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
         //遍历角色
         for (CacheEntity cacheEntity : cacheEntities) {
             //根据 接口uri和管理员数据查询权限=true 查找角色菜单,找到则有管理员数据查询权限,反之普通查询权限
@@ -157,6 +256,16 @@ public class SystemRedisCache {
         return false;
     }
 
+    /**
+     * 判断数据查询权限
+     *
+     * @param loginId 登录id
+     * @return true=管理员数据查询权限 false=普通查询权限
+     */
+    public static boolean getDataAuth(Long loginId) {
+        return getDataAuth(loginId, DEFAULT_STSTEM_ID);
+    }
+
     /**
      * 判断数据查询权限
      *
@@ -165,14 +274,26 @@ public class SystemRedisCache {
      * @param function           普通查询权限时,条件lambda引用字段
      * @return true=管理员数据查询权限 false=普通查询权限
      */
-    public static <T> boolean getDataAuth(Long loginId, LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
-        boolean dataAuth = getDataAuth(loginId);
+    public static <T> boolean getDataAuth(Long loginId, Long systemId, LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
+        boolean dataAuth = getDataAuth(loginId, systemId);
         if (!dataAuth) {
             lambdaQueryWrapper.eq(function, loginId);
         }
         return false;
     }
 
+    /**
+     * 判断数据查询权限
+     *
+     * @param loginId            登录id
+     * @param lambdaQueryWrapper 查询构造器
+     * @param function           普通查询权限时,条件lambda引用字段
+     * @return true=管理员数据查询权限 false=普通查询权限
+     */
+    public static <T> boolean getDataAuth(Long loginId, LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
+        return getDataAuth(loginId, DEFAULT_STSTEM_ID, lambdaQueryWrapper, function);
+    }
+
     /**
      * 获取所有系统ID
      *
@@ -192,13 +313,23 @@ public class SystemRedisCache {
      * @param loginId 登录id
      * @return
      */
-    public static List<Long> getRoleIds(Long loginId) {
-        List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), DEFAULT_STSTEM_ID);
+    public static List<Long> getRoleIds(Long loginId, Long systemId) {
+        List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
         List<Long> list = new ArrayList<>(cacheEntities.size());
         cacheEntities.forEach(cacheEntity -> list.add(Long.parseLong(cacheEntity.getRoleId().toString())));
         return list;
     }
 
+    /**
+     * 获取所有角色ID
+     *
+     * @param loginId 登录id
+     * @return
+     */
+    public static List<Long> getRoleIds(Long loginId) {
+        return getRoleIds(loginId, DEFAULT_STSTEM_ID);
+    }
+
     @Data
     @Accessors(chain = true)
     public static class CacheEntity {

+ 0 - 86
authorize-api-service/src/main/java/com/xy/redis/WorkRedisCache.java

@@ -1,86 +0,0 @@
-package com.xy.redis;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.xy.collections.list.JArrayList;
-import com.xy.collections.list.JList;
-import com.xy.collections.map.JMap;
-import com.xy.entity.*;
-import com.xy.entity.join.SysMenuJoinSysRoleMenu;
-import com.xy.mapper.SysDeptMapper;
-import com.xy.mapper.SysMenuMapper;
-import com.xy.mapper.SysRoleMapper;
-import com.xy.mapper.SysSystemMapper;
-import com.xy.utils.Emptys;
-import com.xy.utils.SpringBeanUtils;
-import icu.mhb.mybatisplus.plugln.core.JoinLambdaWrapper;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * 业务系统redis工具类
- */
-@Component
-public class WorkRedisCache {
-
-    private static String getKey(Long loginId) {
-        return String.format("%s:%d", "work_menu", loginId);
-    }
-
-    /**
-     * 缓存权限相关到redis
-     *
-     * @param loginId 登录id
-     */
-    public static void cache(Long loginId) {
-        SysSystemMapper sysSystemMapper = SpringBeanUtils.getBean(SysSystemMapper.class);
-        SysRoleMapper sysRoleMapper = SpringBeanUtils.getBean(SysRoleMapper.class);
-        SysDeptMapper sysDeptMapper = SpringBeanUtils.getBean(SysDeptMapper.class);
-        SysMenuMapper sysMenuMapper = SpringBeanUtils.getBean(SysMenuMapper.class);
-        //获取登录人所有系统
-        List<SysSystem> sysSystems = sysSystemMapper.selectList(new LambdaQueryWrapper<SysSystem>()
-                .eq(SysSystem::getSysUserId, loginId)
-                .eq(SysSystem::getStatus, true)
-        );
-        if (!Emptys.check(sysSystems)) {
-            return;
-        }
-        //获取登录人所有角色
-        JoinLambdaWrapper<SysRole> sysRoleJoinLambdaWrapper = new JoinLambdaWrapper<>(SysRole.class)
-                .eq(SysRole::getStatus, true)
-                .innerJoin(SysUserRole.class, SysUserRole::getRoleId, SysRole::getId)
-                .eq(SysUserRole::getWorkUserId, loginId)
-                .end();
-        List<SysRole> sysRoles = sysRoleMapper.joinSelectList(sysRoleJoinLambdaWrapper, SysRole.class);
-        JList<Long> sysRoleIds = new JArrayList<>(sysRoles).getProperty(SysRole::getId);
-        if (sysRoleIds.size() == 0) {
-            return;
-        }
-        //获取登录人所有部门
-        JoinLambdaWrapper<SysDept> sysDeptJoinLambdaWrapper = new JoinLambdaWrapper<>(SysDept.class)
-                .eq(SysDept::getStatus, true)
-                .innerJoin(SysUserDept.class, SysUserDept::getDeptId, SysUserDept::getId)
-                .eq(SysUserDept::getWorkUserId, loginId)
-                .end();
-        List<SysDept> sysDepts = sysDeptMapper.joinSelectList(sysDeptJoinLambdaWrapper, SysDept.class);
-        JList<Long> sysDeptsIds = new JArrayList<>(sysDepts).getProperty(SysDept::getId);
-        //获取登录人所有部门角色
-        if (sysDeptsIds.size() > 0) {
-
-        }
-
-        //获取登录人所有角色菜单
-        JoinLambdaWrapper<SysMenu> sysMenuJoinLambdaWrapper = new JoinLambdaWrapper<>(SysMenu.class)
-                .eq(SysMenu::getStatus, true)
-                .innerJoin(SysRoleMenu.class, SysRoleMenu::getMenuId, SysMenu::getId)
-                .selectAs(cb -> cb
-                        .add(SysRoleMenu::getSelectIsAdmin)
-                        .add(SysRoleMenu::getRoleId)
-                )
-                .in(SysRoleMenu::getRoleId, sysRoleIds)
-                .end();
-        List<SysMenuJoinSysRoleMenu> sysMenus = sysMenuMapper.joinSelectList(sysMenuJoinLambdaWrapper, SysMenuJoinSysRoleMenu.class);
-        JMap<Long, List<SysMenuJoinSysRoleMenu>> sysMenuMaps = new JArrayList<>(sysMenus).toMap(SysMenuJoinSysRoleMenu::getRoleId).group();
-    }
-
-}

+ 2 - 2
authorize-api-service/src/main/java/com/xy/service/impl/SysSystemServiceImpl.java

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.dto.SysSystemDto;
 import com.xy.entity.SysSystem;
 import com.xy.mapper.SysSystemMapper;
-import com.xy.redis.SystemRedisCache;
+import com.xy.redis.RedisCache;
 import com.xy.service.SysSystemService;
 import com.xy.utils.MybatisPlusQuery;
 import com.xy.utils.PageBean;
@@ -64,7 +64,7 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
                 .like(SysSystem::getName)
                 .build();
         //判断数据权限
-        SystemRedisCache.getDataAuth(Long.parseLong(SaTokenUtils.getId().toString()), lambdaQueryWrapper, SysSystem::getSysUserId);
+        RedisCache.getDataAuth(Long.parseLong(SaTokenUtils.getId().toString()), lambdaQueryWrapper, SysSystem::getSysUserId);
         IPage<SysSystem> page = page(toIPage(select.getPage()), lambdaQueryWrapper);
         return R.ok(toPageBean(SysSystemDto.Vo.class, page));
     }

+ 2 - 2
authorize-api-service/src/main/java/com/xy/service/impl/SysSystemUserServiceImpl.java

@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.dto.SysSystemUserDto;
 import com.xy.entity.SysSystemUser;
 import com.xy.mapper.SysSystemUserMapper;
-import com.xy.redis.SystemRedisCache;
+import com.xy.redis.RedisCache;
 import com.xy.service.SysSystemUserService;
 import com.xy.utils.*;
 import io.swagger.annotations.Api;
@@ -59,7 +59,7 @@ public class SysSystemUserServiceImpl extends ServiceImpl<SysSystemUserMapper, S
         update.setId(sysSystemUser.getId());
         update(update);
         //缓存权限相关到redis
-        SystemRedisCache.cache(sysSystemUser.getId());
+        RedisCache.systemCache(sysSystemUser.getId());
         return R.ok(StpUtil.getTokenValue());
     }