diff --git a/backend/src/main/java/io/dataease/auth/service/AuthUserService.java b/backend/src/main/java/io/dataease/auth/service/AuthUserService.java
index ba9d201031..e8704f5dc5 100644
--- a/backend/src/main/java/io/dataease/auth/service/AuthUserService.java
+++ b/backend/src/main/java/io/dataease/auth/service/AuthUserService.java
@@ -20,7 +20,9 @@ public interface AuthUserService {
SysUserEntity getUserBySub(String sub, Integer from);
SysUserEntity getUserByWecomId(String weComId);
+
SysUserEntity getUserByDingtalkId(String dingtalkId);
+
SysUserEntity getUserByLarkId(String larkId);
SysUserEntity getUserByLarksuiteId(String larksuiteId);
@@ -61,5 +63,7 @@ public interface AuthUserService {
void clearAllLock();
+ Boolean checkScanCreateLimit();
+
}
diff --git a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java
index a148882cf5..f5329eb743 100644
--- a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java
+++ b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java
@@ -3,6 +3,7 @@ package io.dataease.auth.service.impl;
import io.dataease.auth.api.dto.CurrentRoleDto;
import io.dataease.auth.entity.AccountLockStatus;
import io.dataease.auth.entity.SysUserEntity;
+import io.dataease.commons.constants.ParamConstants;
import io.dataease.commons.utils.CodingUtil;
import io.dataease.exception.DataEaseException;
import io.dataease.ext.*;
@@ -28,6 +29,7 @@ import io.dataease.plugins.xpack.loginlimit.service.LoginLimitXpackService;
import io.dataease.plugins.xpack.oidc.service.OidcXpackService;
import io.dataease.plugins.xpack.wecom.service.WecomXpackService;
+import io.dataease.service.system.SystemParameterService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
@@ -57,6 +59,9 @@ public class AuthUserServiceImpl implements AuthUserService {
@Resource
private SysLoginLimitMapper sysLoginLimitMapper;
+ @Resource
+ private SystemParameterService systemParameterService;
+
/**
* 此处需被F2CRealm登录认证调用 也就是说每次请求都会被调用 所以最好加上缓存
*
@@ -328,4 +333,10 @@ public class AuthUserServiceImpl implements AuthUserService {
SysLoginLimitExample example = new SysLoginLimitExample();
sysLoginLimitMapper.deleteByExample(example);
}
+
+ @Override
+ public Boolean checkScanCreateLimit() {
+ String value = systemParameterService.getValue(ParamConstants.BASIC.SCAN_CREATE_USER.getValue());
+ return StringUtils.isNotBlank(value) && StringUtils.equals("true", value);
+ }
}
diff --git a/backend/src/main/java/io/dataease/commons/constants/ParamConstants.java b/backend/src/main/java/io/dataease/commons/constants/ParamConstants.java
index cb54ff938d..5ad20dc5ae 100644
--- a/backend/src/main/java/io/dataease/commons/constants/ParamConstants.java
+++ b/backend/src/main/java/io/dataease/commons/constants/ParamConstants.java
@@ -125,6 +125,8 @@ public interface ParamConstants {
LOGIN_LIMIT_RELIEVETIMES("loginlimit.relieveTimes"),
LOGIN_LIMIT_OPEN("loginlimit.open"),
+
+ SCAN_CREATE_USER("loginlimit.scanCreateUser"),
TEMPLATE_ACCESS_KEY("basic.templateAccessKey");
private String value;
diff --git a/backend/src/main/java/io/dataease/plugins/server/XDingtalkServer.java b/backend/src/main/java/io/dataease/plugins/server/XDingtalkServer.java
index a4c686349b..92c6c192a2 100644
--- a/backend/src/main/java/io/dataease/plugins/server/XDingtalkServer.java
+++ b/backend/src/main/java/io/dataease/plugins/server/XDingtalkServer.java
@@ -99,6 +99,8 @@ public class XDingtalkServer {
String username = dingUserEntity.getUserid();
SysUserEntity sysUserEntity = authUserService.getUserByDingtalkId(username);
if (null == sysUserEntity) {
+ if (authUserService.checkScanCreateLimit())
+ DEException.throwException(Translator.get("I18N_PROHIBIT_SCANNING_TO_CREATE_USER"));
String email = StringUtils.isNotBlank(dingUserEntity.getOrg_email()) ? dingUserEntity.getOrg_email() : StringUtils.isNotBlank(dingUserEntity.getEmail()) ? dingUserEntity.getEmail() : (username + "@dingtalk.work");
sysUserService.validateExistUser(username, dingUserEntity.getName(), email);
sysUserService.saveDingtalkCUser(dingUserEntity, email);
diff --git a/backend/src/main/java/io/dataease/plugins/server/XLarkServer.java b/backend/src/main/java/io/dataease/plugins/server/XLarkServer.java
index a71909fbcb..b07c8211fc 100644
--- a/backend/src/main/java/io/dataease/plugins/server/XLarkServer.java
+++ b/backend/src/main/java/io/dataease/plugins/server/XLarkServer.java
@@ -100,6 +100,8 @@ public class XLarkServer {
String username = larkUserInfo.getUser_id();
SysUserEntity sysUserEntity = authUserService.getUserByLarkId(username);
if (null == sysUserEntity) {
+ if (authUserService.checkScanCreateLimit())
+ DEException.throwException(Translator.get("I18N_PROHIBIT_SCANNING_TO_CREATE_USER"));
String email = StringUtils.isNotBlank(larkUserInfo.getEmail()) ? larkUserInfo.getEmail() : (username + "@lark.work");
sysUserService.validateExistUser(username, larkUserInfo.getName(), email);
sysUserService.saveLarkCUser(larkUserInfo, email);
diff --git a/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java b/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java
index b4af287f4b..7754416fd9 100644
--- a/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java
+++ b/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java
@@ -100,6 +100,8 @@ public class XLarksuiteServer {
String username = larkUserInfo.getUser_id();
SysUserEntity sysUserEntity = authUserService.getUserByLarksuiteId(username);
if (null == sysUserEntity) {
+ if (authUserService.checkScanCreateLimit())
+ DEException.throwException(Translator.get("I18N_PROHIBIT_SCANNING_TO_CREATE_USER"));
String email = StringUtils.isNotBlank(larkUserInfo.getEmail()) ? larkUserInfo.getEmail() : (username + "@larksuite.work");
sysUserService.validateExistUser(username, larkUserInfo.getName(), email);
sysUserService.saveLarksuiteCUser(larkUserInfo, email);
diff --git a/backend/src/main/java/io/dataease/plugins/server/XWecomServer.java b/backend/src/main/java/io/dataease/plugins/server/XWecomServer.java
index 2c3df6f20f..5b288b0aa8 100644
--- a/backend/src/main/java/io/dataease/plugins/server/XWecomServer.java
+++ b/backend/src/main/java/io/dataease/plugins/server/XWecomServer.java
@@ -103,6 +103,8 @@ public class XWecomServer {
SysUserEntity sysUserEntity = authUserService.getUserByWecomId(userId);
if (null == sysUserEntity) {
+ if (authUserService.checkScanCreateLimit())
+ DEException.throwException(Translator.get("I18N_PROHIBIT_SCANNING_TO_CREATE_USER"));
Object emailObj = ObjectUtils.isEmpty(userMap.get("biz_mail")) ? userMap.get("email") : userMap.get("biz_mail");
String email = ObjectUtils.isEmpty(emailObj) ? (userId + "@wecom.work") : emailObj.toString();
sysUserService.validateExistUser(userId, userMap.get("name").toString(), email);
diff --git a/backend/src/main/java/io/dataease/service/system/SystemParameterService.java b/backend/src/main/java/io/dataease/service/system/SystemParameterService.java
index 8efa2a9671..d162a2f3e8 100644
--- a/backend/src/main/java/io/dataease/service/system/SystemParameterService.java
+++ b/backend/src/main/java/io/dataease/service/system/SystemParameterService.java
@@ -121,6 +121,10 @@ public class SystemParameterService {
boolean open = StringUtils.equals("true", param.getParamValue());
result.setOpen(open ? "true" : "false");
}
+ if (StringUtils.equals(param.getParamKey(), ParamConstants.BASIC.SCAN_CREATE_USER.getValue())) {
+ boolean open = StringUtils.equals("true", param.getParamValue());
+ result.setScanCreateUser(open ? "true" : "false");
+ }
}
}
diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties
index cb0ee034c1..a3faecf6ec 100644
--- a/backend/src/main/resources/i18n/messages_en_US.properties
+++ b/backend/src/main/resources/i18n/messages_en_US.properties
@@ -56,7 +56,7 @@ i18n_chart_count=Count*
i18n_excel_have_merge_region=Excel has merged region
i18n_cron_expression_error=Cron expression error
i18n_same_folder_can_not_repeat=Name is already used in the same folder
-i18n_select_diff_folder= Select Diff Folder
+i18n_select_diff_folder=Select Diff Folder
i18n_default_panel=Default Dashboard
i18n_panel_list=Dashboard
i18n_processing_data=Processing data now, Refresh later
@@ -72,7 +72,7 @@ i18n_sync_job_exists=There is already a synchronization task running, please try
i18n_datasource_check_fail=Invalid,please check config
i18n_not_find_user=Can not find user.
i18n_sql_not_empty=SQL can not be empty.
-i18n_datasource_not_allow_delete_msg= datasets are using this data source and cannot be deleted
+i18n_datasource_not_allow_delete_msg=datasets are using this data source and cannot be deleted
i18n_task_name_repeat=Name is used in same data set
i18n_id_or_pwd_error=Invalid ID or password
i18n_user_do_not_exist=User do not exist
@@ -224,26 +224,20 @@ I18N_END_TIME=End time
I18N_STATUS=Status
I18N_DATA=Data
I18N_SYNC_LOG=Sync logI18N_DS_INVALID
-
I18N_USER_DONOT_EXIST=User does not exist
I18N_USER_SOURCE_PWD_ERROR=Source password error
I18N_USER_PWD_FORMAT_ERROR=Password format error
-
I18N_DS_INVALID=Datasource is invalid
I18N_DS_INVALID_TABLE=Datasource has invalid tables
-
-
-
I18N_ACCOUNT_LOCKED=Account\u3010%s\u3011is locked(Please contact the administrator to unlock or try again in %s minutes)
-
I18N_PANEL_EXIST=The current panel name already exists under this directory
I18N_DATASET_GROUP_EXIST=The current dataset grouping name already exists under this directory
I18N_NOT_JAR=File is not jar!
-
I18N_APP_NO_VIEW_ERROR=This panel don't have views
I18N_APP_TEMPLATE_VIEW_ERROR=This panel have view from template
I18N_APP_NO_DATASET_ERROR=This panel don't have dataset
I18N_APP_ERROR_DATASET=This panel have dataset witch type is excel or api
I18N_APP_NO_DATASOURCE=This panel don't have datasource
I18N_APP_ONE_DATASOURCE_TIPS=This panel should have only one datasource
+I18N_PROHIBIT_SCANNING_TO_CREATE_USER=Prohibit scanning code to create user
diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties
index e37471cbfc..329af67e3d 100644
--- a/backend/src/main/resources/i18n/messages_zh_CN.properties
+++ b/backend/src/main/resources/i18n/messages_zh_CN.properties
@@ -56,7 +56,7 @@ i18n_chart_count=\u8BB0\u5F55\u6570*
i18n_excel_have_merge_region=Excel \u5B58\u5728\u5408\u5E76\u5355\u5143\u683C
i18n_cron_expression_error=Cron \u8868\u8FBE\u5F0F\u6821\u9A8C\u9519\u8BEF
i18n_same_folder_can_not_repeat=\u540C\u4E00\u76EE\u5F55\u4E0B\u8BE5\u540D\u79F0\u5DF2\u88AB\u4F7F\u7528
-i18n_select_diff_folder= \u8BF7\u9009\u62E9\u4E0D\u540C\u7684\u76EE\u5F55
+i18n_select_diff_folder=\u8BF7\u9009\u62E9\u4E0D\u540C\u7684\u76EE\u5F55
i18n_default_panel=\u9ED8\u8BA4\u4EEA\u8868\u677F
i18n_panel_list=\u4EEA\u8868\u677F
i18n_processing_data=\u6B63\u5728\u5904\u7406\u6570\u636E\uFF0C\u7A0D\u540E\u5237\u65B0
@@ -72,7 +72,7 @@ i18n_sync_job_exists=\u5DF2\u7ECF\u6709\u540C\u6B65\u4EFB\u52A1\u5728\u8FD0\u884
i18n_datasource_check_fail=\u6821\u9A8C\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u914D\u7F6E\u4FE1\u606F
i18n_not_find_user=\u672A\u627E\u5230\u7528\u6237
i18n_sql_not_empty=SQL \u4E0D\u80FD\u4E3A\u7A7A
-i18n_datasource_not_allow_delete_msg= \u4E2A\u6570\u636E\u96C6\u6B63\u5728\u4F7F\u7528\u6B64\u6570\u636E\u6E90\uFF0C\u65E0\u6CD5\u5220\u9664
+i18n_datasource_not_allow_delete_msg=\u4E2A\u6570\u636E\u96C6\u6B63\u5728\u4F7F\u7528\u6B64\u6570\u636E\u6E90\uFF0C\u65E0\u6CD5\u5220\u9664
i18n_task_name_repeat=\u540C\u4E00\u6570\u636E\u96C6\u4E0B\u4EFB\u52A1\u540D\u79F0\u5DF2\u88AB\u4F7F\u7528
i18n_id_or_pwd_error=\u65E0\u6548\u7684ID\u6216\u5BC6\u7801
i18n_user_do_not_exist=\u7528\u6237\u4E0D\u5B58\u5728
@@ -224,18 +224,12 @@ I18N_END_TIME=\u7ED3\u675F\u65F6\u95F4
I18N_STATUS=\u72B6\u6001
I18N_DATA=\u6570\u636E
I18N_SYNC_LOG=\u540C\u6B65\u65E5\u5FD7
-
I18N_USER_DONOT_EXIST=\u7528\u6237\u4E0D\u5B58\u5728
I18N_USER_SOURCE_PWD_ERROR=\u539F\u59CB\u5BC6\u7801\u9519\u8BEF
I18N_USER_PWD_FORMAT_ERROR=\u5BC6\u7801\u683C\u5F0F\u9519\u8BEF
-
I18N_DS_INVALID=\u6570\u636E\u6E90\u65E0\u6548
I18N_DS_INVALID_TABLE=\u6570\u636E\u6E90\u4E2D\u6709\u65E0\u6548\u7684\u8868
-
-
-
I18N_ACCOUNT_LOCKED=\u8D26\u53F7\u3010%s\u3011\u5DF2\u9501\u5B9A(\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u89E3\u9501\u6216%s\u5206\u949F\u540E\u91CD\u8BD5)
-
I18N_PANEL_EXIST=\u5F53\u524D\u4EEA\u8868\u677F\u540D\u79F0\u5728\u8BE5\u76EE\u5F55\u4E0B\u9762\u5DF2\u7ECF\u5B58\u5728
I18N_DATASET_GROUP_EXIST=\u5F53\u524D\u6570\u636E\u96C6\u5206\u7EC4\u540D\u79F0\u5728\u8BE5\u76EE\u5F55\u4E0B\u9762\u5DF2\u7ECF\u5B58\u5728
I18N_NOT_JAR=\u6587\u4EF6\u4E0D\u662F jar \u5305!
@@ -245,4 +239,5 @@ I18N_APP_NO_DATASET_ERROR=\u8BE5\u4EEA\u8868\u7248\u6CA1\u6709\u6570\u636E\u96C6
I18N_APP_ERROR_DATASET=\u4EEA\u8868\u677F\u4E2D\u4E0D\u80FD\u5B58\u5728API\u6570\u636E\u6E90\u6216\u8005Excel\u6570\u636E\u96C6
I18N_APP_NO_DATASOURCE=\u6CA1\u6709\u627E\u5230\u6570\u636E\u6E90
I18N_APP_ONE_DATASOURCE_TIPS=\u8BE5\u4EEA\u8868\u677F\u53EA\u80FD\u5B58\u5728\u4E00\u4E2A\u6570\u636E\u6E90
+I18N_PROHIBIT_SCANNING_TO_CREATE_USER=\u7981\u6B62\u626B\u7801\u521B\u5EFA\u7528\u6237\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\uFF01
diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties
index d95e37be11..1bfea65802 100644
--- a/backend/src/main/resources/i18n/messages_zh_TW.properties
+++ b/backend/src/main/resources/i18n/messages_zh_TW.properties
@@ -56,7 +56,7 @@ i18n_chart_count=\u8A18\u9304\u6578*
i18n_excel_have_merge_region=Excel\u5B58\u5728\u5408\u4E26\u55AE\u5143\u683C
i18n_cron_expression_error=Cron\u8868\u9054\u5F0F\u6821\u9A57\u932F\u8AA4
i18n_same_folder_can_not_repeat=\u540C\u4E00\u76EE\u9304\u4E0B\u8A72\u540D\u7A31\u5DF2\u88AB\u4F7F\u7528
-i18n_select_diff_folder= \u8BF7\u9009\u62E9\u4E0D\u540C\u7684\u76EE\u5F55
+i18n_select_diff_folder=\u8BF7\u9009\u62E9\u4E0D\u540C\u7684\u76EE\u5F55
i18n_default_panel=\u9ED8\u8A8D\u5100\u8868\u677F
i18n_panel_list=\u5100\u8868\u677F
i18n_processing_data=\u6B63\u5728\u8655\u7406\u6578\u64DA\uFF0C\u7A0D\u5F8C\u5237\u65B0
@@ -72,7 +72,7 @@ i18n_sync_job_exists=\u5DF2\u7D93\u6709\u540C\u6B65\u4EFB\u52D9\u5728\u904B\u884
i18n_datasource_check_fail=\u6821\u9A57\u5931\u6557\uFF0C\u8ACB\u6AA2\u67E5\u914D\u7F6E\u4FE1\u606F
i18n_not_find_user=\u672A\u627E\u5230\u7528\u6236
i18n_sql_not_empty=SQL \u4E0D\u80FD\u70BA\u7A7A
-i18n_datasource_not_allow_delete_msg= \u500B\u6578\u64DA\u96C6\u6B63\u5728\u4F7F\u7528\u6B64\u6578\u64DA\u6E90\uFF0C\u7121\u6CD5\u522A\u9664
+i18n_datasource_not_allow_delete_msg=\u500B\u6578\u64DA\u96C6\u6B63\u5728\u4F7F\u7528\u6B64\u6578\u64DA\u6E90\uFF0C\u7121\u6CD5\u522A\u9664
i18n_task_name_repeat=\u540C\u4E00\u6578\u64DA\u96C6\u4E0B\u4EFB\u52D9\u540D\u7A31\u5DF2\u88AB\u4F7F\u7528
i18n_id_or_pwd_error=\u7121\u6548\u7684ID\u6216\u5BC6\u78BC
i18n_user_do_not_exist=\u7528\u6236\u4E0D\u5B58\u5728
@@ -220,18 +220,12 @@ I18N_END_TIME=\u7D50\u675F\u6642\u9593
I18N_STATUS=\u72C0\u614B
I18N_DATA=\u6578\u64DA
I18N_SYNC_LOG=\u540C\u6B65\u65E5\u8A8C
-
I18N_USER_DONOT_EXIST=\u7528\u6236\u4E0D\u5B58\u5728
I18N_USER_SOURCE_PWD_ERROR=\u539F\u59CB\u5BC6\u78BC\u932F\u8AA4
I18N_USER_PWD_FORMAT_ERROR=\u5BC6\u78BC\u683C\u5F0F\u932F\u8AA4
-
I18N_DS_INVALID=\u6578\u64DA\u6E90\u7121\u6548
I18N_DS_INVALID_TABLE=\u6578\u64DA\u6E90\u4E2D\u6709\u7121\u6548\u7684\u8868
-
-
-
I18N_ACCOUNT_LOCKED=\u8CEC\u865F\u3010%s\u3011\u5DF2\u9396\u5B9A(\u8ACB\u806F\u7CFB\u7BA1\u7406\u54E1\u89E3\u9396\u6216%s\u5206\u9418\u5F8C\u91CD\u8A66)
-
I18N_PANEL_EXIST=\u7576\u524D\u5100\u9336\u95C6\u540D\u7A31\u5728\u8A72\u76EE\u9304\u4E0B\u9762\u5DF2\u7D93\u5B58\u5728
I18N_DATASET_GROUP_EXIST=\u7576\u524D\u6578\u64DA\u96C6\u5206\u7D44\u540D\u7A31\u5728\u8A72\u76EE\u9304\u4E0B\u9762\u5DF2\u7D93\u5B58\u5728
I18N_NOT_JAR=\u6587\u4EF6\u4E0D\u662F jar \u5305!
@@ -241,3 +235,4 @@ I18N_APP_NO_DATASET_ERROR=\u8A72\u5100\u8868\u7248\u6C92\u6709\u6578\u64DA\u96C6
I18N_APP_ERROR_DATASET=\u5100\u8868\u677F\u4E2D\u4E0D\u80FD\u5B58\u5728API\u6578\u64DA\u6E90\u6216\u8005Excel\u6578\u64DA\u96C6
I18N_APP_NO_DATASOURCE=\u6C92\u6709\u627E\u5230\u6578\u64DA\u6E90
I18N_APP_ONE_DATASOURCE_TIPS=\u8A72\u5100\u8868\u677F\u53EA\u80FD\u5B58\u5728\u4E00\u500B\u6578\u64DA\u6E90
+I18N_PROHIBIT_SCANNING_TO_CREATE_USER=\u7981\u6B62\u6383\u78BC\u5275\u5EFA\u7528\u6236\uFF0C\u8ACB\u806F\u7CFB\u7BA1\u7406\u54E1\uFF01
diff --git a/frontend/src/views/login/index.vue b/frontend/src/views/login/index.vue
index 7902435789..71fb07c317 100644
--- a/frontend/src/views/login/index.vue
+++ b/frontend/src/views/login/index.vue
@@ -259,10 +259,10 @@ export default {
return this.$store.state.user.loginMsg
},
qrTypes() {
- return this.loginTypes && this.loginTypes.filter(item => item > 3 && item < 7) || []
+ return this.loginTypes && this.loginTypes.filter(item => item > 3 && item < 8) || []
},
radioTypes() {
- return this.loginTypes && this.loginTypes.filter(item => item < 4 || item > 6) || []
+ return this.loginTypes && this.loginTypes.filter(item => item < 4 || item > 7) || []
}
},
watch: {
diff --git a/frontend/src/views/system/sysParam/BasicSetting.vue b/frontend/src/views/system/sysParam/BasicSetting.vue
index 23b46c7b55..e555dd783e 100644
--- a/frontend/src/views/system/sysParam/BasicSetting.vue
+++ b/frontend/src/views/system/sysParam/BasicSetting.vue
@@ -159,6 +159,13 @@
component-name="LoginLimitSetting"
/>
+
+