Bladeren bron

feat(user): 支持用户多角色登录

- 修改 LoginUser 类中的 roleId 字段为 roleIds,支持存储多个角色ID- 在 TblUserRoleService 接口中新增 listByUserId 方法,用于获取用户所有角色- 实现 TblUserRoleServiceImpl 中的 listByUserId 方法,查询未删除的用户角色列表
- 更新 UserConstants 常量类,添加 SA_USER_ROLE_IDS 常量- 修改 UserContextInterceptor 拦截器,从 session 中获取并设置用户多个角色ID- 调整 WebGatewayImpl 网关实现,登录时查询并保存用户所有角色ID到 session 中
hxd 2 dagen geleden
bovenliggende
commit
295955cf45

+ 1 - 0
portal-service-common/src/main/java/com/hfln/portal/common/constant/UserConstants.java

@@ -18,6 +18,7 @@ public interface UserConstants {
     String SA_USER_TENANT_NAME = "user_tenant_name";
     String SA_USER_ACCOUNT = "user_account";
     String SA_USER_ROLE_ID = "user_role_id";
+    String SA_USER_ROLE_IDS = "user_role_ids";
 
     // 用户默认角色code
     String ROLE_USER_MANAGER_DEFAULT = "user_manager_default";

+ 3 - 1
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/config/LoginUser.java

@@ -2,6 +2,8 @@ package com.hfln.portal.infrastructure.config;
 
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class LoginUser {
 
@@ -25,6 +27,6 @@ public class LoginUser {
 
     private String unionId;
 
-    private Long roleId;
+    private List<Long> roleIds;
 
 }

+ 2 - 1
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/config/UserContextInterceptor.java

@@ -11,6 +11,7 @@ import org.springframework.web.servlet.HandlerInterceptor;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 @Slf4j
 @Component
@@ -40,7 +41,7 @@ public class UserContextInterceptor implements HandlerInterceptor {
             loginUser.setPhone((String) saSession.get(UserConstants.SA_USER_PHONE));
             loginUser.setOpenId((String) saSession.get(UserConstants.SA_USER_OPEN_ID));
             loginUser.setUnionId((String) saSession.get(UserConstants.SA_USER_UNION_ID));
-            loginUser.setRoleId((Long) saSession.get(UserConstants.SA_USER_ROLE_ID));
+            loginUser.setRoleIds((List<Long>) saSession.get(UserConstants.SA_USER_ROLE_IDS));
             UserContext.set(loginUser);
         } catch (Exception e) {
             log.error("设置用户上下文信息异常", e);

+ 7 - 3
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebGatewayImpl.java

@@ -327,8 +327,12 @@ public class WebGatewayImpl implements WebGateway {
         StpUtil.login(RedisCacheConstant.WEB_USER_PRE + adminUser.getUserId(), DeviceType.WEB.getCode());
 
         // 查询登录用户的roleId
-        TblUserRole userRole = tblUserRoleService.getByUserId(adminUser.getUserId());
-        Long roleId = userRole.getRoleId();
+        List <TblUserRole> userRoles = tblUserRoleService.listByUserId(adminUser.getUserId());
+        List<Long> roleIds = new ArrayList<>();
+        if (userRoles != null && !userRoles.isEmpty()) {
+            // 收集所有角色ID
+            roleIds = userRoles.stream().map(TblUserRole::getRoleId).collect(Collectors.toList());
+        }
 
         // 用户登录后,保存用户信息到 session
         SaSession saSession = StpUtil.getSession();
@@ -336,7 +340,7 @@ public class WebGatewayImpl implements WebGateway {
         saSession.set(UserConstants.SA_USER_ID, adminUser.getUserId());
         saSession.set(UserConstants.SA_USER_TYPE, adminUser.getUserType());
         saSession.set(UserConstants.SA_USER_ACCOUNT, adminUser.getAccount());
-        saSession.set(UserConstants.SA_USER_ROLE_ID, roleId);
+        saSession.set(UserConstants.SA_USER_ROLE_IDS, roleIds);
         if (adminUser.getTenantId() != null) {
             saSession.set(UserConstants.SA_USER_TENANT_ID, adminUser.getTenantId());
         }

+ 3 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/TblUserRoleService.java

@@ -3,6 +3,8 @@ package com.hfln.portal.infrastructure.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.hfln.portal.infrastructure.po.TblUserRole;
 
+import java.util.List;
+
 public interface TblUserRoleService extends IService<TblUserRole> {
 
     TblUserRole getByUserId(Long userId);
@@ -10,4 +12,5 @@ public interface TblUserRoleService extends IService<TblUserRole> {
     int delByUserId(Long userId);
     // 这里可以扩展自定义方法接口
 
+    List<TblUserRole> listByUserId(Long userId);
 }

+ 10 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/TblUserRoleServiceImpl.java

@@ -9,6 +9,8 @@ import com.hfln.portal.infrastructure.service.TblUserRoleService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 
 @Service
 @Slf4j
@@ -26,4 +28,12 @@ public class TblUserRoleServiceImpl extends ServiceImpl<TblUserRoleMapper, TblUs
     public int delByUserId(Long userId) {
         return this.baseMapper.delByUserId(userId);
     }
+
+    @Override
+    public List<TblUserRole> listByUserId(Long userId) {
+        LambdaQueryWrapper<TblUserRole> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TblUserRole::getUserId, userId);
+        queryWrapper.eq(TblUserRole::getIsDeleted, BasePO.DeleteFlag.NOT_DELETED);
+        return this.baseMapper.selectList(queryWrapper);
+    }
 }