mirror of https://gitee.com/stylefeng/roses
【8.0】【sys】【role】获取角色绑定菜单功能信息,从缓存中读取
parent
4d2fcc0c27
commit
c35be9e229
|
@ -1,4 +1,4 @@
|
||||||
package cn.stylefeng.roses.kernel.sys.modular.role.cache.rolemenu.clear;
|
package cn.stylefeng.roses.kernel.sys.modular.role.cache;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
|
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
|
|
@ -0,0 +1,26 @@
|
||||||
|
package cn.stylefeng.roses.kernel.sys.modular.role.cache.roleoptions;
|
||||||
|
|
||||||
|
import cn.hutool.cache.impl.TimedCache;
|
||||||
|
import cn.stylefeng.roses.kernel.cache.memory.AbstractMemoryCacheOperator;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.constants.RoleConstants;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色绑定菜单功能
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/7/14 23:23
|
||||||
|
*/
|
||||||
|
public class RoleMenuOptionsMemoryCache extends AbstractMemoryCacheOperator<List<Long>> {
|
||||||
|
|
||||||
|
public RoleMenuOptionsMemoryCache(TimedCache<String, List<Long>> timedCache) {
|
||||||
|
super(timedCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommonKeyPrefix() {
|
||||||
|
return RoleConstants.ROLE_MENU_OPTIONS_CACHE_PREFIX;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package cn.stylefeng.roses.kernel.sys.modular.role.cache.roleoptions;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.cache.redis.AbstractRedisCacheOperator;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.constants.RoleConstants;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色绑定菜单功能
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/7/14 23:23
|
||||||
|
*/
|
||||||
|
public class RoleMenuOptionsRedisCache extends AbstractRedisCacheOperator<List<Long>> {
|
||||||
|
|
||||||
|
public RoleMenuOptionsRedisCache(RedisTemplate<String, List<Long>> redisTemplate) {
|
||||||
|
super(redisTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommonKeyPrefix() {
|
||||||
|
return RoleConstants.ROLE_MENU_OPTIONS_CACHE_PREFIX;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -18,4 +18,9 @@ public interface RoleConstants {
|
||||||
*/
|
*/
|
||||||
String ROLE_BIND_MENU_EVENT = "ROLE_BIND_MENU_EVENT";
|
String ROLE_BIND_MENU_EVENT = "ROLE_BIND_MENU_EVENT";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色绑定菜单功能的缓存前缀
|
||||||
|
*/
|
||||||
|
String ROLE_MENU_OPTIONS_CACHE_PREFIX = "ROLE:MENU_OPTIONS:";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
|
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveMenuCallbackApi;
|
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveMenuCallbackApi;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveRoleCallbackApi;
|
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveRoleCallbackApi;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.api.constants.SysConstants;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenuOptions;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenuOptions;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleAssignOperateAction;
|
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleAssignOperateAction;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleMenuOptions;
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleMenuOptions;
|
||||||
|
@ -15,6 +17,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -30,6 +33,9 @@ import java.util.stream.Collectors;
|
||||||
public class SysRoleMenuOptionsServiceImpl extends ServiceImpl<SysRoleMenuOptionsMapper, SysRoleMenuOptions> implements
|
public class SysRoleMenuOptionsServiceImpl extends ServiceImpl<SysRoleMenuOptionsMapper, SysRoleMenuOptions> implements
|
||||||
SysRoleMenuOptionsService, RemoveRoleCallbackApi, RoleAssignOperateAction, RemoveMenuCallbackApi {
|
SysRoleMenuOptionsService, RemoveRoleCallbackApi, RoleAssignOperateAction, RemoveMenuCallbackApi {
|
||||||
|
|
||||||
|
@Resource(name = "roleMenuOptionsCache")
|
||||||
|
private CacheOperatorApi<List<Long>> roleMenuOptionsCache;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeRoleBindOptions(Long optionsId) {
|
public void removeRoleBindOptions(Long optionsId) {
|
||||||
LambdaQueryWrapper<SysRoleMenuOptions> sysRoleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysRoleMenuOptions> sysRoleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
@ -65,20 +71,41 @@ public class SysRoleMenuOptionsServiceImpl extends ServiceImpl<SysRoleMenuOption
|
||||||
@Override
|
@Override
|
||||||
public List<Long> getRoleBindMenuOptionsIdList(List<Long> roleIdList) {
|
public List<Long> getRoleBindMenuOptionsIdList(List<Long> roleIdList) {
|
||||||
|
|
||||||
|
List<Long> result = new ArrayList<>();
|
||||||
|
|
||||||
if (ObjectUtil.isEmpty(roleIdList)) {
|
if (ObjectUtil.isEmpty(roleIdList)) {
|
||||||
return new ArrayList<>();
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
LambdaQueryWrapper<SysRoleMenuOptions> queryWrapper = new LambdaQueryWrapper<>();
|
for (Long roleId : roleIdList) {
|
||||||
queryWrapper.in(SysRoleMenuOptions::getRoleId, roleIdList);
|
|
||||||
queryWrapper.select(SysRoleMenuOptions::getMenuOptionId);
|
|
||||||
List<SysRoleMenuOptions> roleMenuOptions = this.list(queryWrapper);
|
|
||||||
|
|
||||||
if (ObjectUtil.isEmpty(roleMenuOptions)) {
|
String roleIdKey = roleId.toString();
|
||||||
return new ArrayList<>();
|
|
||||||
|
// 先从缓存找到角色绑定的功能
|
||||||
|
List<Long> optionsCached = roleMenuOptionsCache.get(roleIdKey);
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(optionsCached)) {
|
||||||
|
result.addAll(optionsCached);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询数据库角色对应的菜单功能
|
||||||
|
LambdaQueryWrapper<SysRoleMenuOptions> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
|
||||||
|
queryWrapper.select(SysRoleMenuOptions::getMenuOptionId);
|
||||||
|
List<SysRoleMenuOptions> roleMenuOptions = this.list(queryWrapper);
|
||||||
|
if (ObjectUtil.isNotEmpty(roleMenuOptions)) {
|
||||||
|
|
||||||
|
List<Long> menuOptionsIdQueryResult = roleMenuOptions.stream().map(SysRoleMenuOptions::getMenuOptionId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
result.addAll(menuOptionsIdQueryResult);
|
||||||
|
|
||||||
|
// 添加到缓存中
|
||||||
|
roleMenuOptionsCache.put(roleIdKey, menuOptionsIdQueryResult, SysConstants.DEFAULT_SYS_CACHE_TIMEOUT_SECONDS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return roleMenuOptions.stream().map(SysRoleMenuOptions::getMenuOptionId).collect(Collectors.toList());
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue