From 06588f3ad4cdc711cd349fbca25e43960bcb8562 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期日, 02 七月 2023 16:13:14 +0800
Subject: [PATCH] update 优化 !pr382 修复一些问题 完事流程逻辑

---
 ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java |   64 +++++++++++++++++++-------------
 1 files changed, 38 insertions(+), 26 deletions(-)

diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/socialAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
similarity index 66%
rename from ruoyi-admin/src/main/java/org/dromara/web/service/impl/socialAuthStrategy.java
rename to ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
index c7599eb..f71bc9f 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/socialAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
@@ -11,17 +11,21 @@
 import me.zhyd.oauth.model.AuthUser;
 import org.dromara.common.core.constant.Constants;
 import org.dromara.common.core.domain.model.LoginBody;
-import org.dromara.common.core.domain.model.SocialLogin;
+import org.dromara.common.core.domain.model.LoginUser;
+import org.dromara.common.core.enums.UserStatus;
 import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.exception.user.UserException;
 import org.dromara.common.core.utils.MessageUtils;
 import org.dromara.common.core.utils.ValidatorUtils;
 import org.dromara.common.core.validate.auth.SocialGroup;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.common.social.config.properties.SocialProperties;
 import org.dromara.common.social.utils.SocialUtils;
+import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.system.domain.SysClient;
 import org.dromara.system.domain.SysUser;
 import org.dromara.system.domain.vo.SysSocialVo;
+import org.dromara.system.domain.vo.SysUserVo;
 import org.dromara.system.mapper.SysUserMapper;
 import org.dromara.system.service.ISysSocialService;
 import org.dromara.web.domain.vo.LoginVo;
@@ -37,7 +41,7 @@
 @Slf4j
 @Service("social" + IAuthStrategy.BASE_NAME)
 @RequiredArgsConstructor
-public class socialAuthStrategy implements IAuthStrategy {
+public class SocialAuthStrategy implements IAuthStrategy {
 
     private final SocialProperties socialProperties;
     private final ISysSocialService sysSocialService;
@@ -52,13 +56,14 @@
 
     /**
      * 鐧诲綍-绗笁鏂规巿鏉冪櫥褰�
-     * @param clientId 瀹㈡埛绔痠d
+     *
+     * @param clientId  瀹㈡埛绔痠d
      * @param loginBody 鐧诲綍淇℃伅
-     * @param client 瀹㈡埛绔俊鎭�
+     * @param client    瀹㈡埛绔俊鎭�
      */
     @Override
     public LoginVo login(String clientId, LoginBody loginBody, SysClient client) {
-        AuthResponse<AuthUser> response = SocialUtils.loginAuth(loginBody,socialProperties);
+        AuthResponse<AuthUser> response = SocialUtils.loginAuth(loginBody, socialProperties);
         if (!response.ok()) {
             throw new ServiceException(response.getMsg());
         }
@@ -66,30 +71,19 @@
         SysSocialVo social = sysSocialService.selectByAuthId(authUserData.getSource() + authUserData.getUuid());
         if (!ObjectUtil.isNotNull(social)) {
             throw new ServiceException("浣犺繕娌℃湁缁戝畾绗笁鏂硅处鍙凤紝缁戝畾鍚庢墠鍙互鐧诲綍锛�");
-        }//楠岃瘉鎺堟潈琛ㄩ噷闈㈢殑绉熸埛id鏄惁鍖呭惈褰撳墠绉熸埛id
-        if (ObjectUtil.isNotNull(social) && StrUtil.isNotBlank(social.getTenantId())
-            && !social.getTenantId().contains(loginBody.getTenantId())) {
+        }
+        // 楠岃瘉鎺堟潈琛ㄩ噷闈㈢殑绉熸埛id鏄惁鍖呭惈褰撳墠绉熸埛id
+        String tenantId = social.getTenantId();
+        if (ObjectUtil.isNotNull(social) && StrUtil.isNotBlank(tenantId)
+            && !tenantId.contains(loginBody.getTenantId())) {
             throw new ServiceException("瀵逛笉璧凤紝浣犳病鏈夋潈闄愮櫥褰曞綋鍓嶇鎴凤紒");
         }
-        return loadinUser(social, client);
-    }
 
-    /**
-     * 鐧诲綍鐢ㄦ埛淇℃伅
-     *
-     * @param social
-     * @param client
-     * @return
-     */
-    private LoginVo loadinUser(SysSocialVo social, SysClient client) {
-        SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
-            .eq(SysUser::getUserId, social.getUserId()));
-        SocialLogin loginUser = new SocialLogin();
-        loginUser.setUserId(user.getUserId());
-        loginUser.setTenantId(user.getTenantId());
-        loginUser.setUsername(user.getUserName());
-        loginUser.setUserType(user.getUserType());
-        // 鎵ц鐧诲綍
+        // 鏌ユ壘鐢ㄦ埛
+        SysUserVo user = loadUser(tenantId, social.getUserId());
+
+        // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser 灞炴�т笉澶熺敤缁ф壙鎵╁睍灏辫浜�
+        LoginUser loginUser = loginService.buildLoginUser(user);
         SaLoginModel model = new SaLoginModel();
         model.setDevice(client.getDeviceType());
         // 鑷畾涔夊垎閰� 涓嶅悓鐢ㄦ埛浣撶郴 涓嶅悓 token 鎺堟潈鏃堕棿 涓嶈缃粯璁よ蛋鍏ㄥ眬 yml 閰嶇疆
@@ -106,4 +100,22 @@
         return loginVo;
     }
 
+    private SysUserVo loadUser(String tenantId, Long userId) {
+        SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
+            .select(SysUser::getUserName, SysUser::getStatus)
+            .eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
+            .eq(SysUser::getUserId, userId));
+        if (ObjectUtil.isNull(user)) {
+            log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", "");
+            throw new UserException("user.not.exists", "");
+        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
+            log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", "");
+            throw new UserException("user.blocked", "");
+        }
+        if (TenantHelper.isEnable()) {
+            return userMapper.selectTenantUserByUserName(user.getUserName(), tenantId);
+        }
+        return userMapper.selectUserByUserName(user.getUserName());
+    }
+
 }

--
Gitblit v1.9.3