|
@@ -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 {
|