优化管理端登录,权限菜单读取缓存

This commit is contained in:
paulGao 2021-11-04 14:42:12 +08:00
parent 8ddd39d6e5
commit a44f06b3e8
6 changed files with 88 additions and 40 deletions

View File

@ -1,7 +1,7 @@
package cn.lili.cache; package cn.lili.cache;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.security.enums.UserEnums;
/** /**
* 缓存前缀 * 缓存前缀
@ -469,6 +469,14 @@ public enum CachePrefix {
* 店铺分类 * 店铺分类
*/ */
STORE_CATEGORY, STORE_CATEGORY,
/**
* 用户菜单
*/
MENU_USER_ID,
/**
* 用户菜单
*/
USER_MENU,
/** /**
* 订单暂时缓存 * 订单暂时缓存
*/ */

View File

@ -78,22 +78,14 @@ public class SensitiveJsonSerializer extends JsonSerializer<String>
//如果是店铺 //如果是店铺
if (authUser.getRole().equals(UserEnums.STORE)) { if (authUser.getRole().equals(UserEnums.STORE)) {
//店铺需要进行脱敏则脱敏处理 //店铺需要进行脱敏则脱敏处理
if (systemSettingProperties.getSensitiveLevel() == 2) { return systemSettingProperties.getSensitiveLevel() == 2;
return true;
}
//默认不需要
return false;
} }
//如果是店铺 //如果是店铺
if (authUser.getRole().equals(UserEnums.MANAGER)) { if (authUser.getRole().equals(UserEnums.MANAGER)) {
//店铺需要进行脱敏则脱敏处理 //店铺需要进行脱敏则脱敏处理
if (systemSettingProperties.getSensitiveLevel() >= 1) { return systemSettingProperties.getSensitiveLevel() >= 1;
return true;
}
//默认不需要
return false;
} }
return false; return false;

View File

@ -1,7 +1,7 @@
package cn.lili.modules.permission.service; package cn.lili.modules.permission.service;
import cn.lili.modules.permission.entity.dto.MenuSearchParams;
import cn.lili.modules.permission.entity.dos.Menu; import cn.lili.modules.permission.entity.dos.Menu;
import cn.lili.modules.permission.entity.dto.MenuSearchParams;
import cn.lili.modules.permission.entity.vo.MenuVO; import cn.lili.modules.permission.entity.vo.MenuVO;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheConfig;
@ -63,4 +63,12 @@ public interface MenuService extends IService<Menu> {
*/ */
void deleteIds(List<String> ids); void deleteIds(List<String> ids);
/**
* 添加更新菜单
*
* @param menu 菜单数据
* @return 是否成功
*/
boolean saveOrUpdateMenu(Menu menu);
} }

View File

@ -1,11 +1,12 @@
package cn.lili.modules.permission.serviceimpl; package cn.lili.modules.permission.serviceimpl;
import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.common.enums.ResultCode; 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.mybatis.util.PageUtil;
import cn.lili.common.utils.StringUtils;
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;
@ -14,15 +15,14 @@ import cn.lili.modules.permission.entity.vo.MenuVO;
import cn.lili.modules.permission.mapper.MenuMapper; import cn.lili.modules.permission.mapper.MenuMapper;
import cn.lili.modules.permission.service.MenuService; import cn.lili.modules.permission.service.MenuService;
import cn.lili.modules.permission.service.RoleMenuService; import cn.lili.modules.permission.service.RoleMenuService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.Comparator;
import java.util.List;
/** /**
* 权限业务层实现 * 权限业务层实现
@ -39,6 +39,9 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
@Autowired @Autowired
private RoleMenuService roleMenuService; private RoleMenuService roleMenuService;
@Autowired
private Cache<List<Menu>> cache;
@Override @Override
public void deleteIds(List<String> ids) { public void deleteIds(List<String> ids) {
QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<>(); QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<>();
@ -53,8 +56,8 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
@Override @Override
public List<MenuVO> findUserTree() { public List<MenuVO> findUserTree() {
AuthUser authUser = UserContext.getCurrentUser(); AuthUser authUser = Objects.requireNonNull(UserContext.getCurrentUser());
if (authUser.getIsSuper()) { if (Boolean.TRUE.equals(authUser.getIsSuper())) {
return this.tree(); return this.tree();
} }
List<Menu> userMenus = this.baseMapper.findByUserId(authUser.getId()); List<Menu> userMenus = this.baseMapper.findByUserId(authUser.getId());
@ -63,7 +66,28 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
@Override @Override
public List<Menu> findUserList(String userId) { public List<Menu> findUserList(String userId) {
return this.baseMapper.findByUserId(userId); String cacheKey = CachePrefix.MENU_USER_ID.getPrefix() + userId;
List<Menu> menuList = cache.get(cacheKey);
if (menuList == null) {
menuList = this.baseMapper.findByUserId(userId);
cache.put(cacheKey, menuList);
}
return menuList;
}
/**
* 添加更新菜单
*
* @param menu 菜单数据
* @return 是否成功
*/
@Override
public boolean saveOrUpdateMenu(Menu menu) {
if (CharSequenceUtil.isNotEmpty(menu.getId())) {
cache.vagueDel(CachePrefix.MENU_USER_ID.getPrefix());
cache.vagueDel(CachePrefix.USER_MENU.getPrefix());
}
return this.saveOrUpdate(menu);
} }
@Override @Override
@ -77,12 +101,12 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
public List<Menu> searchList(MenuSearchParams menuSearchParams) { public List<Menu> searchList(MenuSearchParams menuSearchParams) {
//title 需要特殊处理 //title 需要特殊处理
String title = null; String title = null;
if (StringUtils.isNotEmpty(menuSearchParams.getTitle())) { if (CharSequenceUtil.isNotEmpty(menuSearchParams.getTitle())) {
title = menuSearchParams.getTitle(); title = menuSearchParams.getTitle();
menuSearchParams.setTitle(null); menuSearchParams.setTitle(null);
} }
QueryWrapper queryWrapper = PageUtil.initWrapper(menuSearchParams, new SearchVO()); QueryWrapper<Menu> queryWrapper = PageUtil.initWrapper(menuSearchParams, new SearchVO());
if (StringUtils.isNotEmpty(title)) { if (CharSequenceUtil.isNotEmpty(title)) {
queryWrapper.like("title", title); queryWrapper.like("title", title);
} }
queryWrapper.orderByDesc("sort_order"); queryWrapper.orderByDesc("sort_order");
@ -98,14 +122,14 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
} catch (Exception e) { } catch (Exception e) {
log.error("菜单树错误", e); log.error("菜单树错误", e);
} }
return null; return Collections.emptyList();
} }
/** /**
* 传入自定义菜单集合 * 传入自定义菜单集合
* *
* @param menus * @param menus 自定义菜单集合
* @return * @return 修改后的自定义菜单集合
*/ */
private List<MenuVO> tree(List<Menu> menus) { private List<MenuVO> tree(List<Menu> menus) {
List<MenuVO> tree = new ArrayList<>(); List<MenuVO> tree = new ArrayList<>();
@ -117,12 +141,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
} }
}); });
//对一级菜单排序 //对一级菜单排序
tree.sort(new Comparator<MenuVO>() { tree.sort(Comparator.comparing(Menu::getSortOrder));
@Override
public int compare(MenuVO o1, MenuVO o2) {
return o1.getSortOrder().compareTo(o2.getSortOrder());
}
});
return tree; return tree;
} }

View File

@ -1,13 +1,17 @@
package cn.lili.modules.permission.serviceimpl; package cn.lili.modules.permission.serviceimpl;
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.modules.permission.entity.dos.RoleMenu; import cn.lili.modules.permission.entity.dos.RoleMenu;
import cn.lili.modules.permission.entity.vo.UserMenuVO; import cn.lili.modules.permission.entity.vo.UserMenuVO;
import cn.lili.modules.permission.mapper.MenuMapper; import cn.lili.modules.permission.mapper.MenuMapper;
import cn.lili.modules.permission.mapper.RoleMenuMapper; import cn.lili.modules.permission.mapper.RoleMenuMapper;
import cn.lili.modules.permission.service.RoleMenuService; import cn.lili.modules.permission.service.RoleMenuService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import groovy.util.logging.Slf4j; import groovy.util.logging.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -31,16 +35,26 @@ public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> i
@Resource @Resource
private MenuMapper menuMapper; private MenuMapper menuMapper;
@Autowired
private Cache<Object> cache;
@Override @Override
public List<RoleMenu> findByRoleId(String roleId) { public List<RoleMenu> findByRoleId(String roleId) {
QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<>(); LambdaQueryWrapper<RoleMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq("role_id", roleId); queryWrapper.eq(RoleMenu::getRoleId, roleId);
return this.baseMapper.selectList(queryWrapper); return this.baseMapper.selectList(queryWrapper);
} }
@Override @Override
public List<UserMenuVO> findAllMenu(String userId) { public List<UserMenuVO> findAllMenu(String userId) {
return menuMapper.getUserRoleMenu(userId); String cacheKey = CachePrefix.USER_MENU.getPrefix() + userId;
List<UserMenuVO> menuList = (List<UserMenuVO>) cache.get(cacheKey);
if (menuList == null) {
menuList = menuMapper.getUserRoleMenu(userId);
cache.put(cacheKey, menuList);
}
return menuList;
} }
@ -51,8 +65,10 @@ 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);
} }
} }
@ -62,12 +78,17 @@ 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
public void deleteRoleMenu(List<String> roleId) { public void deleteRoleMenu(List<String> roleId) {
//删除 //删除
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

@ -2,7 +2,6 @@ package cn.lili.controller.permission;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.system.aspect.annotation.DemoSite;
import cn.lili.modules.permission.entity.dos.Menu; import cn.lili.modules.permission.entity.dos.Menu;
import cn.lili.modules.permission.entity.dto.MenuSearchParams; import cn.lili.modules.permission.entity.dto.MenuSearchParams;
import cn.lili.modules.permission.entity.vo.MenuVO; import cn.lili.modules.permission.entity.vo.MenuVO;
@ -29,6 +28,7 @@ import java.util.List;
@Api(tags = "管理端,菜单管理接口") @Api(tags = "管理端,菜单管理接口")
@RequestMapping("/manager/menu") @RequestMapping("/manager/menu")
public class MenuManagerController { public class MenuManagerController {
@Autowired @Autowired
private MenuService menuService; private MenuService menuService;
@ -43,9 +43,9 @@ public class MenuManagerController {
@DemoSite @DemoSite
public ResultMessage<Menu> add(Menu menu) { public ResultMessage<Menu> add(Menu menu) {
try { try {
menuService.save(menu); menuService.saveOrUpdateMenu(menu);
} catch (Exception e) { } catch (Exception e) {
log.error("添加菜单错误",e); log.error("添加菜单错误", e);
} }
return ResultUtil.data(menu); return ResultUtil.data(menu);
} }
@ -57,7 +57,7 @@ public class MenuManagerController {
@DemoSite @DemoSite
public ResultMessage<Menu> edit(@PathVariable String id, Menu menu) { public ResultMessage<Menu> edit(@PathVariable String id, Menu menu) {
menu.setId(id); menu.setId(id);
menuService.updateById(menu); menuService.saveOrUpdateMenu(menu);
return ResultUtil.data(menu); return ResultUtil.data(menu);
} }