소스 검색

后台登录需要输入租户,校验逻辑需要根据租户id校验,并给出提示,前太不限制(前台无需输入租户)

liyanbo 4 주 전
부모
커밋
36c3cebd27

+ 2 - 1
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/enums/ErrorCodeConstants.java

@@ -18,6 +18,7 @@ public interface ErrorCodeConstants {
     ErrorCode AUTH_REGISTER_CAPTCHA_CODE_ERROR = new ErrorCode(1_002_000_008, "验证码不正确,原因:{}");
     ErrorCode AUTH_LOGIN_IP_NOT_AUTHORIZED = new ErrorCode(1_002_000_009, "登录IP未被授权,请使用手机号校验登录!");
     ErrorCode AUTH_LOGIN_IP_NOT_AUTHORIZED_NOT_MOBILE_NOT_EXISTS = new ErrorCode(1_002_000_010, "登录IP未被授权,账号未绑定手机号,请联系管理员绑定手机号!");
+    ErrorCode AUTH_LOGIN_TENANT_NOT_EXISTS = new ErrorCode(1_002_000_011, "登录失败,此租户下账号不存在!");
 
     // ========== 菜单模块 1-002-001-000 ==========
     ErrorCode MENU_NAME_DUPLICATE = new ErrorCode(1_002_001_000, "已经存在该名字的菜单");
@@ -181,4 +182,4 @@ public interface ErrorCodeConstants {
     // ========== 站内信发送 1-002-028-000 ==========
     ErrorCode NOTIFY_SEND_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_028_000, "模板参数({})缺失");
 
-}
+}

+ 12 - 0
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/service/auth/AdminAuthServiceImpl.java

@@ -91,17 +91,29 @@ public class AdminAuthServiceImpl implements AdminAuthService {
 
     @Override
     public AdminUserDO authenticate(String username, String password) {
+
+        Long tenantId = TenantContextHolder.getTenantId();
+
         final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_USERNAME;
 
         // 校验账号是否存在
         List<AdminUserDO> userList = TenantUtils.executeIgnore(() ->
                 userService.getUserListByUsername(username)
         );
+
         if (userList.isEmpty()) {
             createLoginLog(null, username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
             throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
         }
 
+        if (Objects.nonNull(tenantId)) {
+            userList.removeIf(userDO -> !userDO.getTenantId().equals(tenantId));
+            if (userList.isEmpty()) {
+                createLoginLog(null, username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
+                throw exception(AUTH_LOGIN_TENANT_NOT_EXISTS);
+            }
+        }
+
         AdminUserDO user = userList.get(0);
         boolean isMatch = true;
         for (AdminUserDO userDO : userList) {