From 2ca169c85f61256fb5185c078dba1bfef2be5066 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期三, 11 六月 2025 22:34:11 +0800
Subject: [PATCH] 小程序鉴权处理

---
 framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java                    |    7 +++
 framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java      |    5 ++
 framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java |   15 ++++---
 seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java           |   12 ++++++
 framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java        |   23 ++++++++---
 seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java                 |   18 +++++----
 buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java                  |    3 +
 framework/src/main/java/cn/lili/modules/member/service/MemberService.java                |    2 +
 framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java            |   10 ++++
 9 files changed, 70 insertions(+), 25 deletions(-)

diff --git a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java
index 7d81a2f..d1e2df7 100644
--- a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java
+++ b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java
@@ -99,7 +99,8 @@
             AuthUser authUser = new Gson().fromJson(json, AuthUser.class);
 
             //鏍¢獙redis涓槸鍚︽湁鏉冮檺
-            if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER,authUser.getId()) + jwt)) {
+            if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER, authUser.getId()) + jwt) ||
+                    cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.STORE, authUser.getId()) + jwt)) {
                 //鏋勯�犺繑鍥炰俊鎭�
                 List<GrantedAuthority> auths = new ArrayList<>();
                 auths.add(new SimpleGrantedAuthority("ROLE_" + authUser.getRole().name()));
diff --git a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
index eac79b1..6758887 100644
--- a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
@@ -265,6 +265,11 @@
             if (StrUtil.isNotBlank(authUser.getPhone())) {
                 member = memberService.findByMobile(authUser.getPhone());
             }
+
+            if (StrUtil.isNotBlank(authUser.getUuid())) {
+                member = memberService.findByUUID(authUser.getUuid());
+            }
+
             //濡傛灉鏈煡鍒版墜鏈哄彿鐨勪細鍛樺垯浣跨敤绗笁鏂圭櫥褰�
             if (member == null) {
                 LambdaQueryWrapper<Connect> queryWrapper = new LambdaQueryWrapper<Connect>();
diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
index 8027050..83bb664 100644
--- a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
+++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
@@ -5,6 +5,7 @@
 import cn.lili.common.security.sensitive.enums.SensitiveStrategy;
 import cn.lili.common.utils.CommonUtil;
 import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
@@ -80,6 +81,10 @@
     @ApiModelProperty(value = "搴楅摵ID")
     private String storeId;
 
+    @ApiModelProperty(value = "uuId")
+    @TableField(value = "uu_id")
+    private String uuId;
+
     /**
      * @see ClientTypeEnum
      */
@@ -111,7 +116,7 @@
         this.lastLoginDate = new Date();
     }
 
-    public Member(String username, String password, String face, String nickName, Integer sex,String mobile) {
+    public Member(String username, String password, String face, String nickName, Integer sex, String mobile) {
         this.username = username;
         this.password = password;
         this.mobile = mobile;
diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java
index f818a52..20983da 100644
--- a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java
+++ b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java
@@ -336,4 +336,6 @@
     boolean appSConfirm(String token, Integer code);
 
     QRLoginResultVo loginWithSession(String token);
+
+    Member findByUUID(String uuid);
 }
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
index bc00f42..5cf289a 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
@@ -257,6 +257,7 @@
             Member member = new Member(authUser.getUsername(), UuidUtils.getUUID(), authUser.getAvatar(), authUser.getNickname(),
                     authUser.getGender() != null ? Convert.toInt(authUser.getGender().getCode()) : 0, authUser.getPhone());
             member.setPassword(DEFAULT_PASSWORD);
+            member.setUuId(authUser.getUuid());
             // 鍙戦�佷細鍛樻敞鍐屼俊鎭�
             registerHandler(member);
 
@@ -501,18 +502,19 @@
         this.updateById(member);
         return member;
     }
+
     @Override
-    public Result resetPassword(String id){
-            String password = "123456";
-            Member member = this.getById(id);
-            member.setPassword(new BCryptPasswordEncoder().encode(password));
-            this.updateById(member);
-            return Result.ok("閲嶇疆鎴愬姛");
+    public Result resetPassword(String id) {
+        String password = "123456";
+        Member member = this.getById(id);
+        member.setPassword(new BCryptPasswordEncoder().encode(password));
+        this.updateById(member);
+        return Result.ok("閲嶇疆鎴愬姛");
     }
 
 
     @Override
-    public Member updateMemberPartProperties(String id,String password,String mobile) {
+    public Member updateMemberPartProperties(String id, String password, String mobile) {
         //鏌ヨ浼氬憳淇℃伅
         Member member = this.getById(id);
         member.setMobile(mobile);
@@ -861,6 +863,13 @@
         return result;
     }
 
+    @Override
+    public Member findByUUID(String uuid) {
+        QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("uu_id", uuid);
+        return this.baseMapper.selectOne(queryWrapper);
+    }
+
     /**
      * 妫�娴嬩細鍛�
      *
diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java
index ed26a22..f84a49b 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java
@@ -48,13 +48,14 @@
 
     @Override
     public List<StoreUserMenuVO> findAllMenu(String clerkId, String memberId) {
-        String cacheKey = CachePrefix.STORE_USER_MENU.getPrefix() + memberId;
-        List<StoreUserMenuVO> menuList = (List<StoreUserMenuVO>) cache.get(cacheKey);
-        if (menuList == null || menuList.isEmpty()) {
-            menuList = storeMenuService.getUserRoleMenu(clerkId);
-            cache.put(cacheKey, menuList);
-        }
-        return menuList;
+//        String cacheKey = CachePrefix.STORE_USER_MENU.getPrefix() + memberId;
+//        List<StoreUserMenuVO> menuList = (List<StoreUserMenuVO>) cache.get(cacheKey);
+//        if (menuList == null || menuList.isEmpty()) {
+//            menuList = storeMenuService.getUserRoleMenu(clerkId);
+//            cache.put(cacheKey, menuList);
+//        }
+//        return menuList;
+        return storeMenuService.getUserRoleMenu(clerkId);
     }
 
 
diff --git a/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java b/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java
index ad5e008..4df5d43 100644
--- a/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java
+++ b/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java
@@ -8,7 +8,9 @@
 import cn.lili.common.security.token.Token;
 import cn.lili.common.security.token.TokenUtil;
 import cn.lili.common.security.token.base.AbstractTokenGenerate;
+import cn.lili.modules.member.entity.dos.Clerk;
 import cn.lili.modules.member.entity.dos.Member;
+import cn.lili.modules.member.service.ClerkService;
 import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
 import cn.lili.rocketmq.tags.MemberTagsEnum;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
@@ -34,6 +36,9 @@
     @Autowired
     private RocketMQTemplate rocketMQTemplate;
 
+    @Autowired
+    private ClerkService clerkService;
+
     @Override
     public Token createToken(Member member, Boolean longTerm) {
 
@@ -57,11 +62,14 @@
         String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_LOGIN.name();
         rocketMQTemplate.asyncSend(destination, member, RocketmqSendCallbackBuilder.commonCallback());
 
+        Clerk clerk = clerkService.getClerkByMemberId(member.getId());
+
         AuthUser authUser = AuthUser.builder()
                 .username(member.getUsername())
                 .face(member.getFace())
                 .id(member.getId())
-                .role(UserEnums.MEMBER)
+                .role(clerk == null ? UserEnums.MEMBER : UserEnums.STORE)
+                .storeId(clerk == null ? null : clerk.getStoreId())
                 .nickName(member.getNickName())
                 .longTerm(longTerm)
                 .build();
diff --git a/seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java
index 362d46b..04efa8a 100644
--- a/seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java
+++ b/seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java
@@ -1,12 +1,16 @@
 package cn.lili.controller.goods;
 
 import cn.lili.common.enums.ResultUtil;
+import cn.lili.common.security.AuthUser;
 import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.goods.entity.vos.CategoryBrandVO;
 import cn.lili.modules.goods.entity.vos.CategoryVO;
 import cn.lili.modules.goods.service.CategoryBrandService;
 import cn.lili.modules.goods.service.CategoryService;
+import cn.lili.modules.member.entity.dos.Clerk;
+import cn.lili.modules.member.service.ClerkService;
 import cn.lili.modules.store.service.StoreDetailService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -49,11 +53,19 @@
      */
     @Autowired
     private StoreDetailService storeDetailService;
+    @Autowired
+    private ClerkService clerkService;
 
     @ApiOperation(value = "鑾峰彇搴楅摵缁忚惀鐨勫垎绫�")
     @GetMapping(value = "/all")
     public ResultMessage<List<CategoryVO>> getListAll() {
+
         String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
+        if (StringUtils.isEmpty(storeId)) {
+            Clerk clerk = clerkService.getClerkByMemberId(UserContext.getCurrentUserId());
+            storeId = clerk.getStoreId();
+        }
+
         //鑾峰彇搴楅摵缁忚惀鑼冨洿
         String goodsManagementCategory = storeDetailService.getStoreDetail(storeId).getGoodsManagementCategory();
         return ResultUtil.data(this.categoryService.getStoreCategory(goodsManagementCategory.split(",")));
diff --git a/seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java b/seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java
index 816d74b..8302055 100644
--- a/seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java
+++ b/seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java
@@ -106,7 +106,9 @@
             AuthUser authUser = new Gson().fromJson(json, AuthUser.class);
 
             //鏍¢獙redis涓槸鍚︽湁鏉冮檺
-            if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.STORE, authUser.getId()) + jwt)) {
+            if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER, authUser.getId()) + jwt) ||
+                    cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.STORE, authUser.getId()) + jwt)
+            ) {
                 //鐢ㄦ埛瑙掕壊
                 List<GrantedAuthority> auths = new ArrayList<>();
                 auths.add(new SimpleGrantedAuthority("ROLE_" + authUser.getRole().name()));
@@ -145,14 +147,14 @@
             //鑾峰彇缂撳瓨涓殑鏉冮檺
             Map<String, List<String>> permission =
                     (Map<String, List<String>>) cache.get(permissionCacheKey);
-            if (permission == null || permission.isEmpty()) {
-                //鏍规嵁浼氬憳id鏌ヨ搴楀憳淇℃伅
-                Clerk clerk = clerkService.getClerkByMemberId(authUser.getId());
-                if (clerk != null) {
-                    permission = storeTokenGenerate.permissionList(storeMenuRoleService.findAllMenu(clerk.getId(), authUser.getId()));
-                    cache.put(permissionCacheKey, permission);
-                }
+            // if (permission == null || permission.isEmpty()) {
+            //鏍规嵁浼氬憳id鏌ヨ搴楀憳淇℃伅
+            Clerk clerk = clerkService.getClerkByMemberId(authUser.getId());
+            if (clerk != null) {
+                permission = storeTokenGenerate.permissionList(storeMenuRoleService.findAllMenu(clerk.getId(), authUser.getId()));
+                cache.put(permissionCacheKey, permission);
             }
+            //}
             //鑾峰彇鏁版嵁(GET 璇锋眰)鏉冮檺
             if (request.getMethod().equals(RequestMethod.GET.name())) {
                 //濡傛灉鐢ㄦ埛鐨勮秴绾ф潈闄愬拰鏌ラ槄鏉冮檺閮戒笉鍖呭惈褰撳墠璇锋眰鐨刟pi

--
Gitblit v1.8.0