From fd3a2b77416179bff736932c22c6187b0a386c79 Mon Sep 17 00:00:00 2001 From: dongxiayu Date: Wed, 17 Jul 2024 00:28:55 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BF=AE=E5=A4=8D=E3=80=91StpInterfac?= =?UTF-8?q?eImpl.getPermissionList=E6=80=A7=E8=83=BD=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=A4=84=E7=90=86-ALL=20SNOWY/CLOUD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xiaonuo/common/consts/CacheConstant.java | 37 +++++++++++++++++++ .../auth/core/config/AuthConfigure.java | 17 ++++++++- .../login/service/impl/AuthServiceImpl.java | 16 ++++++-- 3 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 snowy-common/src/main/java/vip/xiaonuo/common/consts/CacheConstant.java diff --git a/snowy-common/src/main/java/vip/xiaonuo/common/consts/CacheConstant.java b/snowy-common/src/main/java/vip/xiaonuo/common/consts/CacheConstant.java new file mode 100644 index 00000000..44cdf430 --- /dev/null +++ b/snowy-common/src/main/java/vip/xiaonuo/common/consts/CacheConstant.java @@ -0,0 +1,37 @@ +/* + * Copyright [2022] [https://www.xiaonuo.vip] + * + * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Snowy源码头部的版权声明。 + * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip + * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 + * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip + */ +package vip.xiaonuo.common.consts; + +/** + * @description 缓存静态常量 + * @author dongxiayu + * @date 2023/1/30 0:44 + **/ +public class CacheConstant { + + /** + * 权限资源 + */ + public static final String PERMISSION_RESOURCE_CACHE_KEY = "permission-resource"; + + /** + * B端权限列表 + */ + public static final String AUTH_B_PERMISSION_LIST_CACHE_KEY = "auth-b-permission-list:"; + + /** + * C端权限列表 + */ + public static final String AUTH_C_PERMISSION_LIST_CACHE_KEY = "auth-c-permission-list:"; + +} diff --git a/snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/core/config/AuthConfigure.java b/snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/core/config/AuthConfigure.java index 1f471153..226b3e13 100644 --- a/snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/core/config/AuthConfigure.java +++ b/snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/core/config/AuthConfigure.java @@ -17,6 +17,8 @@ import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.stp.StpInterface; import cn.dev33.satoken.stp.StpLogic; import cn.dev33.satoken.strategy.SaStrategy; +import cn.hutool.json.JSONUtil; +import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -28,6 +30,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import vip.xiaonuo.auth.core.enums.SaClientTypeEnum; import vip.xiaonuo.auth.core.util.StpClientLoginUserUtil; import vip.xiaonuo.auth.core.util.StpLoginUserUtil; +import vip.xiaonuo.common.cache.CommonCacheOperator; +import vip.xiaonuo.common.consts.CacheConstant; import java.util.List; @@ -86,15 +90,24 @@ public class AuthConfigure implements WebMvcConfigurer { @Component public static class StpInterfaceImpl implements StpInterface { + @Resource + private CommonCacheOperator commonCacheOperator; + /** * 返回一个账号所拥有的权限码集合 */ @Override public List getPermissionList(Object loginId, String loginType) { if (SaClientTypeEnum.B.getValue().equals(loginType)) { - return StpLoginUserUtil.getLoginUser().getPermissionCodeList(); +// return StpLoginUserUtil.getLoginUser().getPermissionCodeList(); + Object permissionListObject = commonCacheOperator.get(CacheConstant.AUTH_B_PERMISSION_LIST_CACHE_KEY+loginId); + List permissionList = JSONUtil.parseArray(permissionListObject).toList(String.class); + return permissionList; } else { - return StpClientLoginUserUtil.getClientLoginUser().getPermissionCodeList(); +// return StpClientLoginUserUtil.getClientLoginUser().getPermissionCodeList(); + Object permissionListObject = commonCacheOperator.get(CacheConstant.AUTH_C_PERMISSION_LIST_CACHE_KEY+loginId); + List permissionList = JSONUtil.parseArray(permissionListObject).toList(String.class); + return permissionList; } } diff --git a/snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java b/snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java index 3ec66704..d3de0029 100644 --- a/snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java +++ b/snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java @@ -41,6 +41,7 @@ import vip.xiaonuo.auth.modular.login.param.AuthPhoneValidCodeLoginParam; import vip.xiaonuo.auth.modular.login.result.AuthPicValidCodeResult; import vip.xiaonuo.auth.modular.login.service.AuthService; import vip.xiaonuo.common.cache.CommonCacheOperator; +import vip.xiaonuo.common.consts.CacheConstant; import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.util.CommonCryptogramUtil; import vip.xiaonuo.common.util.CommonEmailUtil; @@ -371,8 +372,12 @@ public class AuthServiceImpl implements AuthService { saBaseLoginUser.setDataScopeList(Convert.toList(SaBaseLoginUser.DataScope.class, loginUserApi.getPermissionListByUserIdAndRoleIdList(userAndRoleIdList, saBaseLoginUser.getOrgId()))); // 获取权限码 - saBaseLoginUser.setPermissionCodeList(saBaseLoginUser.getDataScopeList().stream() - .map(SaBaseLoginUser.DataScope::getApiUrl).collect(Collectors.toList())); + List permissionCodeList = saBaseLoginUser.getDataScopeList().stream() + .map(SaBaseLoginUser.DataScope::getApiUrl).collect(Collectors.toList()); + saBaseLoginUser.setPermissionCodeList(permissionCodeList); + // 权限码列表存入缓存 + commonCacheOperator.put(CacheConstant.AUTH_B_PERMISSION_LIST_CACHE_KEY + saBaseLoginUser.getId(),permissionCodeList); + // 获取角色码 saBaseLoginUser.setRoleCodeList(roleCodeList); // 缓存用户信息,此处使用TokenSession为了指定时间内无操作则自动下线 @@ -410,8 +415,11 @@ public class AuthServiceImpl implements AuthService { saBaseClientLoginUser.setDataScopeList(Convert.toList(SaBaseClientLoginUser.DataScope.class, clientLoginUserApi.getPermissionListByUserIdAndRoleIdList(userAndRoleIdList, null))); // 获取权限码 - saBaseClientLoginUser.setPermissionCodeList(saBaseClientLoginUser.getDataScopeList().stream() - .map(SaBaseClientLoginUser.DataScope::getApiUrl).collect(Collectors.toList())); + List permissionCodeList = saBaseClientLoginUser.getDataScopeList().stream() + .map(SaBaseClientLoginUser.DataScope::getApiUrl).collect(Collectors.toList()); + saBaseClientLoginUser.setPermissionCodeList(permissionCodeList); + // 权限码列表存入缓存 + commonCacheOperator.put(CacheConstant.AUTH_C_PERMISSION_LIST_CACHE_KEY + saBaseClientLoginUser.getId(),permissionCodeList); // 获取角色码 saBaseClientLoginUser.setRoleCodeList(roleCodeList); // 缓存用户信息,此处使用TokenSession为了指定时间内无操作则自动下线