管理员用户权限不再放在永久缓存,而是放在临时缓存(5分钟),由于访问频率较低,在加上涉及的业务太复杂,所以去除了之前对权限的永久缓存以及模糊删除用户权限缓存相关代码

This commit is contained in:
Chopper 2022-04-26 09:33:54 +08:00
parent cbd201c43b
commit 0e0a8b039d
4 changed files with 11 additions and 28 deletions

View File

@ -471,10 +471,9 @@ public enum CachePrefix {
STORE_CATEGORY, STORE_CATEGORY,
/** /**
* 用户菜单 * 用户菜单
*/ * <p>
MENU_USER_ID, * 这个缓存并非永久缓存而是300秒缓存也就是说修改用户关联的部门关联的角色
/** * 部门关联的角色角色关联的菜单等等最多需要5分钟才能生效
* 用户菜单
*/ */
USER_MENU, USER_MENU,
/** /**

View File

@ -7,6 +7,7 @@ import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.vo.SearchVO; import cn.lili.common.vo.SearchVO;
import cn.lili.modules.permission.entity.dos.Menu; import cn.lili.modules.permission.entity.dos.Menu;
import cn.lili.modules.permission.entity.dos.RoleMenu; import cn.lili.modules.permission.entity.dos.RoleMenu;
@ -66,11 +67,12 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
@Override @Override
public List<Menu> findUserList(String userId) { public List<Menu> findUserList(String userId) {
String cacheKey = CachePrefix.MENU_USER_ID.getPrefix() + userId; String cacheKey = CachePrefix.USER_MENU.getPrefix(UserEnums.MANAGER) + userId;
List<Menu> menuList = cache.get(cacheKey); List<Menu> menuList = cache.get(cacheKey);
if (menuList == null) { if (menuList == null) {
menuList = this.baseMapper.findByUserId(userId); menuList = this.baseMapper.findByUserId(userId);
cache.put(cacheKey, menuList); //每5分钟重新确认用户权限
cache.put(cacheKey, menuList, 300L);
} }
return menuList; return menuList;
} }
@ -84,8 +86,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
@Override @Override
public boolean saveOrUpdateMenu(Menu menu) { public boolean saveOrUpdateMenu(Menu menu) {
if (CharSequenceUtil.isNotEmpty(menu.getId())) { if (CharSequenceUtil.isNotEmpty(menu.getId())) {
cache.vagueDel(CachePrefix.MENU_USER_ID.getPrefix());
cache.vagueDel(CachePrefix.USER_MENU.getPrefix());
} }
return this.saveOrUpdate(menu); return this.saveOrUpdate(menu);
} }

View File

@ -59,8 +59,7 @@ public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> i
this.deleteRoleMenu(roleId); this.deleteRoleMenu(roleId);
//重新保存角色菜单关系 //重新保存角色菜单关系
this.saveBatch(roleMenus); this.saveBatch(roleMenus);
cache.vagueDel(CachePrefix.MENU_USER_ID.getPrefix());
cache.vagueDel(CachePrefix.USER_MENU.getPrefix());
} catch (Exception e) { } catch (Exception e) {
log.error("修改用户权限错误", e); log.error("修改用户权限错误", e);
} }
@ -72,8 +71,7 @@ public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> i
QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<>(); QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("role_id", roleId); queryWrapper.eq("role_id", roleId);
this.remove(queryWrapper); this.remove(queryWrapper);
cache.vagueDel(CachePrefix.MENU_USER_ID.getPrefix());
cache.vagueDel(CachePrefix.USER_MENU.getPrefix());
} }
@Override @Override
@ -82,7 +80,6 @@ public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> i
QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<>(); QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<>();
queryWrapper.in("role_id", roleId); queryWrapper.in("role_id", roleId);
this.remove(queryWrapper); this.remove(queryWrapper);
cache.vagueDel(CachePrefix.MENU_USER_ID.getPrefix());
cache.vagueDel(CachePrefix.USER_MENU.getPrefix());
} }
} }

View File

@ -1,8 +1,6 @@
package cn.lili.modules.system.token; package cn.lili.modules.system.token;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.enums.PermissionEnum; import cn.lili.common.security.enums.PermissionEnum;
import cn.lili.common.security.enums.UserEnums; import cn.lili.common.security.enums.UserEnums;
@ -11,7 +9,6 @@ import cn.lili.common.security.token.TokenUtil;
import cn.lili.common.security.token.base.AbstractTokenGenerate; import cn.lili.common.security.token.base.AbstractTokenGenerate;
import cn.lili.modules.permission.entity.dos.AdminUser; import cn.lili.modules.permission.entity.dos.AdminUser;
import cn.lili.modules.permission.entity.vo.UserMenuVO; import cn.lili.modules.permission.entity.vo.UserMenuVO;
import cn.lili.modules.permission.service.RoleMenuService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -32,21 +29,10 @@ public class ManagerTokenGenerate extends AbstractTokenGenerate<AdminUser> {
@Autowired @Autowired
private TokenUtil tokenUtil; private TokenUtil tokenUtil;
@Autowired
private RoleMenuService roleMenuService;
@Autowired
private Cache cache;
@Override @Override
public Token createToken(AdminUser adminUser, Boolean longTerm) { public Token createToken(AdminUser adminUser, Boolean longTerm) {
AuthUser authUser = new AuthUser(adminUser.getUsername(), adminUser.getId(), adminUser.getAvatar(), UserEnums.MANAGER, adminUser.getNickName(), adminUser.getIsSuper()); AuthUser authUser = new AuthUser(adminUser.getUsername(), adminUser.getId(), adminUser.getAvatar(), UserEnums.MANAGER, adminUser.getNickName(), adminUser.getIsSuper());
List<UserMenuVO> userMenuVOList = roleMenuService.findAllMenu(authUser.getId());
//缓存权限列表
cache.put(CachePrefix.PERMISSION_LIST.getPrefix(UserEnums.MANAGER) + authUser.getId(), this.permissionList(userMenuVOList));
return tokenUtil.createToken(adminUser.getUsername(), authUser, longTerm, UserEnums.MANAGER); return tokenUtil.createToken(adminUser.getUsername(), authUser, longTerm, UserEnums.MANAGER);
} }