diff --git a/eladmin-common/src/main/java/me/zhengjie/config/AuthorityConfig.java b/eladmin-common/src/main/java/me/zhengjie/config/AuthorityConfig.java index e4daacd6..b6538591 100644 --- a/eladmin-common/src/main/java/me/zhengjie/config/AuthorityConfig.java +++ b/eladmin-common/src/main/java/me/zhengjie/config/AuthorityConfig.java @@ -28,6 +28,11 @@ import java.util.stream.Collectors; @Service(value = "el") public class AuthorityConfig { + /** + * 判断接口是否有权限 + * @param permissions 权限 + * @return / + */ public Boolean check(String ...permissions){ // 获取当前用户的所有权限 List elPermissions = SecurityUtils.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()); diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/CacheKey.java b/eladmin-common/src/main/java/me/zhengjie/utils/CacheKey.java index 7485713f..e8fb0860 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/CacheKey.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/CacheKey.java @@ -16,9 +16,9 @@ package me.zhengjie.utils; /** - * @author: liaojinlong - * @date: 2020/6/11 15:49 - * @apiNote: 关于缓存的Key集合 + * @author liaojinlong + * @date 2020/6/11 15:49 + * @description 关于缓存的Key集合 */ public interface CacheKey { @@ -26,31 +26,39 @@ public interface CacheKey { * 用户 */ String USER_ID = "user::id:"; + /** * 数据 */ String DATA_USER = "data::user:"; + /** * 菜单 */ String MENU_ID = "menu::id:"; String MENU_USER = "menu::user:"; + /** * 角色授权 */ String ROLE_AUTH = "role::auth:"; + String ROLE_USER = "role::user:"; + /** * 角色信息 */ String ROLE_ID = "role::id:"; + /** * 部门 */ String DEPT_ID = "dept::id:"; + /** * 岗位 */ String JOB_ID = "job::id:"; + /** * 数据字典 */ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserDetailsServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserDetailsServiceImpl.java index 6d5d51ad..1e0723d1 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserDetailsServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserDetailsServiceImpl.java @@ -18,14 +18,15 @@ package me.zhengjie.modules.security.service; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhengjie.exception.BadRequestException; +import me.zhengjie.modules.security.service.dto.AuthorityDto; import me.zhengjie.modules.security.service.dto.JwtUserDto; -import me.zhengjie.modules.system.domain.User; import me.zhengjie.modules.system.service.DataService; import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.UserService; import me.zhengjie.modules.system.service.dto.UserDto; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Service; +import java.util.List; /** * @author Zheng Jie @@ -51,7 +52,10 @@ public class UserDetailsServiceImpl implements UserDetailsService { if (!user.getEnabled()) { throw new BadRequestException("账号未激活!"); } - jwtUserDto = new JwtUserDto(user, dataService.getDeptIds(user), roleService.buildAuthorities(user), user.getPassword()); + // 获取用户的权限 + List authorities = roleService.buildPermissions(user); + // 初始化JwtUserDto + jwtUserDto = new JwtUserDto(user, dataService.getDeptIds(user), authorities, user.getPassword()); // 添加缓存数据 userCacheManager.addUserCache(username, jwtUserDto); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java index 8fc1be99..d1743cd9 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java @@ -67,10 +67,10 @@ public interface RoleService { /** * 根据用户ID查询 - * @param id 用户ID + * @param userId 用户ID * @return / */ - List findByUsersId(Long id); + List findByUsersId(Long userId); /** * 根据角色查询角色级别 @@ -120,7 +120,7 @@ public interface RoleService { * @param user 用户信息 * @return 权限信息 */ - List buildAuthorities(UserDto user); + List buildPermissions(UserDto user); /** * 验证是否被用户关联 diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java index f43096f4..7fba169b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java @@ -148,8 +148,14 @@ public class RoleServiceImpl implements RoleService { } @Override - public List findByUsersId(Long id) { - return roleSmallMapper.toDto(new ArrayList<>(roleRepository.findByUserId(id))); + public List findByUsersId(Long userId) { + String key = CacheKey.ROLE_USER + userId; + List roles = redisUtils.getList(key, RoleSmallDto.class); + if (CollUtil.isEmpty(roles)) { + roles = roleSmallMapper.toDto(new ArrayList<>(roleRepository.findByUserId(userId))); + redisUtils.set(key, roles, 1, TimeUnit.DAYS); + } + return roles; } @Override @@ -165,7 +171,7 @@ public class RoleServiceImpl implements RoleService { } @Override - public List buildAuthorities(UserDto user) { + public List buildPermissions(UserDto user) { String key = CacheKey.ROLE_AUTH + user.getId(); List authorityDtos = redisUtils.getList(key, AuthorityDto.class); if (CollUtil.isEmpty(authorityDtos)) { @@ -225,6 +231,7 @@ public class RoleServiceImpl implements RoleService { redisUtils.delByKeys(CacheKey.DATA_USER, userIds); redisUtils.delByKeys(CacheKey.MENU_USER, userIds); redisUtils.delByKeys(CacheKey.ROLE_AUTH, userIds); + redisUtils.delByKeys(CacheKey.ROLE_USER, userIds); } redisUtils.del(CacheKey.ROLE_ID + id); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java index 9904d431..15782d23 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java @@ -119,6 +119,7 @@ public class UserServiceImpl implements UserService { redisUtils.del(CacheKey.DATA_USER + resources.getId()); redisUtils.del(CacheKey.MENU_USER + resources.getId()); redisUtils.del(CacheKey.ROLE_AUTH + resources.getId()); + redisUtils.del(CacheKey.ROLE_USER + resources.getId()); } // 修改部门会影响 数据权限 if (!Objects.equals(resources.getDept(),user.getDept())) {