You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampark.apache.org by be...@apache.org on 2022/10/17 04:47:07 UTC

[incubator-streampark] branch dev updated: [Feature] Restrict the format of variable code in the variable management module #1851 (#1852)

This is an automated email from the ASF dual-hosted git repository.

benjobs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev by this push:
     new b0210bb78 [Feature] Restrict the format of variable code in the variable management module #1851 (#1852)
b0210bb78 is described below

commit b0210bb78ff92e24d4b393c1e918b1e6cc9a6a4f
Author: macksonmu <30...@qq.com>
AuthorDate: Mon Oct 17 12:47:00 2022 +0800

    [Feature] Restrict the format of variable code in the variable management module #1851 (#1852)
    
    * [Feature] Added variable management menu to team admin role #1849
    
    * [Feature] Restrict the format of variable code in the variable management module #1851
    
    Co-authored-by: mucj7 <mu...@chinaunicom.cn>
---
 .../src/assembly/script/data/mysql-data.sql        |  6 +++---
 .../src/assembly/script/data/pgsql-data.sql        |  6 +++---
 .../src/assembly/script/upgrade/mysql/1.2.4.sql    |  5 ++++-
 .../controller/VariableController.java             | 25 +++++++++++++++++++---
 .../console/{system => core}/entity/Variable.java  |  2 +-
 .../{system => core}/mapper/VariableMapper.java    |  4 ++--
 .../{system => core}/service/VariableService.java  |  4 ++--
 .../service/impl/VariableServiceImpl.java          |  8 +++----
 .../system/service/impl/MenuServiceImpl.java       |  2 +-
 .../src/main/resources/db/data-h2.sql              |  6 +++---
 .../mapper/{system => core}/VariableMapper.xml     |  4 ++--
 .../src/views/system/variable/Add.vue              | 16 +++++++++-----
 12 files changed, 58 insertions(+), 30 deletions(-)

diff --git a/streampark-console/streampark-console-service/src/assembly/script/data/mysql-data.sql b/streampark-console/streampark-console-service/src/assembly/script/data/mysql-data.sql
index 373db49d4..89600fd9b 100644
--- a/streampark-console/streampark-console-service/src/assembly/script/data/mysql-data.sql
+++ b/streampark-console/streampark-console-service/src/assembly/script/data/mysql-data.sql
@@ -69,7 +69,7 @@ insert into `t_menu` values (100015, 100013, 'Application', '/flink/app', 'flink
 insert into `t_menu` values (100016, 100013, 'Add Application', '/flink/app/add', 'flink/app/Add', 'app:create', '', 0, 0, null, now(), now());
 insert into `t_menu` values (100017, 100013, 'Add Project', '/flink/project/add', 'flink/project/Add', 'project:create', '', 0, 0, null, now(), now());
 insert into `t_menu` values (100018, 100013, 'App Detail', '/flink/app/detail', 'flink/app/Detail', 'app:detail', '', 0, 0, null, now(), now());
-insert into `t_menu` values (100019, 100013, 'Notebook', '/flink/notebook/view', 'flink/notebook/Submit', 'notebook:submit', 'read', 0, 1, 3, now(), now());
+insert into `t_menu` values (100019, 100013, 'Notebook', '/flink/notebook/view', 'flink/notebook/Submit', 'notebook:submit', 'read', 0, 1, 4, now(), now());
 insert into `t_menu` values (100020, 100013, 'Edit Flink App', '/flink/app/edit_flink', 'flink/app/EditFlink', 'app:update', '', 0, 0, null, now(), now());
 insert into `t_menu` values (100021, 100013, 'Edit StreamPark App', '/flink/app/edit_streampark', 'flink/app/EditStreamPark', 'app:update', '', 0, 0, null, now(), now());
 insert into `t_menu` values (100022, 100014, 'build', null, null, 'project:build', null, 1, 1, null, now(), now());
@@ -84,7 +84,7 @@ insert into `t_menu` values (100030, 100015, 'backup rollback', null, null, 'bac
 insert into `t_menu` values (100031, 100015, 'backup delete', null, null, 'backup:delete', null, 1, 1, null, now(), now());
 insert into `t_menu` values (100032, 100015, 'conf delete', null, null, 'conf:delete', null, 1, 1, null, now(), now());
 insert into `t_menu` values (100033, 100015, 'flame Graph', null, null, 'app:flameGraph', null, 1, 1, null, now(), now());
-insert into `t_menu` values (100034, 100013, 'Setting', '/flink/setting', 'flink/setting/View', 'setting:view', 'setting', 0, 1, 4, now(), now());
+insert into `t_menu` values (100034, 100013, 'Setting', '/flink/setting', 'flink/setting/View', 'setting:view', 'setting', 0, 1, 5, now(), now());
 insert into `t_menu` values (100035, 100034, 'Setting Update', null, null, 'setting:update', null, 1, 1, null, now(), now());
 insert into `t_menu` values (100036, 100013, 'Edit Project', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, 0, 0, null, now(), now());
 insert into `t_menu` values (100037, 100015, 'delete', null, null, 'app:delete', null, 1, 1, null, now(), now());
@@ -104,7 +104,7 @@ insert into `t_menu` values (100050, 100048, 'update', null, null, 'member:updat
 insert into `t_menu` values (100051, 100048, 'delete', null, null, 'member:delete', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100052, 100048, 'role view', null, null, 'role:view', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100053, 100001, 'types', null, null, 'user:types', null, '1', 1, null, now(), now());
-insert into `t_menu` VALUES (100054, 100000, 'Variable Management', '/system/variable', 'system/variable/View', 'variable:view', 'code', '0', 1, 3, now(), now());
+insert into `t_menu` VALUES (100054, 100013, 'Variable', '/system/variable', 'system/variable/View', 'variable:view', 'code', '0', 1, 3, now(), now());
 insert into `t_menu` VALUES (100055, 100054, 'add', NULL, NULL, 'variable:add', NULL, '1', 1, NULL, now(), now());
 insert into `t_menu` VALUES (100056, 100054, 'update', NULL, NULL, 'variable:update', NULL, '1', 1, NULL, now(), now());
 insert into `t_menu` VALUES (100057, 100054, 'delete', NULL, NULL, 'variable:delete', NULL, '1', 1, NULL, now(), now());
diff --git a/streampark-console/streampark-console-service/src/assembly/script/data/pgsql-data.sql b/streampark-console/streampark-console-service/src/assembly/script/data/pgsql-data.sql
index 1de633234..4daf827d2 100644
--- a/streampark-console/streampark-console-service/src/assembly/script/data/pgsql-data.sql
+++ b/streampark-console/streampark-console-service/src/assembly/script/data/pgsql-data.sql
@@ -65,7 +65,7 @@ insert into "public"."t_menu" values (100015, 100013, 'Application', '/flink/app
 insert into "public"."t_menu" values (100016, 100013, 'Add Application', '/flink/app/add', 'flink/app/Add', 'app:create', '', 0, false, null, now(), now());
 insert into "public"."t_menu" values (100017, 100013, 'Add Project', '/flink/project/add', 'flink/project/Add', 'project:create', '', 0, false, null, now(), now());
 insert into "public"."t_menu" values (100018, 100013, 'App Detail', '/flink/app/detail', 'flink/app/Detail', 'app:detail', '', 0, false, null, now(), now());
-insert into "public"."t_menu" values (100019, 100013, 'Notebook', '/flink/notebook/view', 'flink/notebook/Submit', 'notebook:submit', 'read', 0, true, 3, now(), now());
+insert into "public"."t_menu" values (100019, 100013, 'Notebook', '/flink/notebook/view', 'flink/notebook/Submit', 'notebook:submit', 'read', 0, true, 4, now(), now());
 insert into "public"."t_menu" values (100020, 100013, 'Edit Flink App', '/flink/app/edit_flink', 'flink/app/EditFlink', 'app:update', '', 0, false, null, now(), now());
 insert into "public"."t_menu" values (100021, 100013, 'Edit StreamPark App', '/flink/app/edit_streampark', 'flink/app/EditStreamPark', 'app:update', '', 0, false, null, now(), now());
 insert into "public"."t_menu" values (100022, 100014, 'build', null, null, 'project:build', null, 1, true, null, now(), now());
@@ -80,7 +80,7 @@ insert into "public"."t_menu" values (100030, 100015, 'backup rollback', null, n
 insert into "public"."t_menu" values (100031, 100015, 'backup delete', null, null, 'backup:delete', null, 1, true, null, now(), now());
 insert into "public"."t_menu" values (100032, 100015, 'conf delete', null, null, 'conf:delete', null, 1, true, null, now(), now());
 insert into "public"."t_menu" values (100033, 100015, 'flame Graph', null, null, 'app:flameGraph', null, 1, true, null, now(), now());
-insert into "public"."t_menu" values (100034, 100013, 'Setting', '/flink/setting', 'flink/setting/View', 'setting:view', 'setting', 0, true, 4, now(), now());
+insert into "public"."t_menu" values (100034, 100013, 'Setting', '/flink/setting', 'flink/setting/View', 'setting:view', 'setting', 0, true, 5, now(), now());
 insert into "public"."t_menu" values (100035, 100034, 'Setting Update', null, null, 'setting:update', null, 1, true, null, now(), now());
 insert into "public"."t_menu" values (100036, 100013, 'Edit Project', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, 0, false, null, now(), now());
 insert into "public"."t_menu" values (100037, 100015, 'delete', null, null, 'app:delete', null, 1, true, null, now(), now());
@@ -100,7 +100,7 @@ insert into "public"."t_menu" values (100050, 100048, 'update', null, null, 'mem
 insert into "public"."t_menu" values (100051, 100048, 'delete', null, null, 'member:delete', null, '1', 1, null, now(), now());
 insert into "public"."t_menu" values (100052, 100048, 'role view', null, null, 'role:view', null, '1', 1, null, now(), now());
 insert into "public"."t_menu" values (100053, 100001, 'types', null, null, 'user:types', null, '1', 1, null, now(), now());
-insert into "public"."t_menu" VALUES (100054, 100000, 'Variable Management', '/system/variable', 'system/variable/View', 'variable:view', 'code', '0', 1, 3, now(), now());
+insert into "public"."t_menu" VALUES (100054, 100000, 'Variable', '/system/variable', 'system/variable/View', 'variable:view', 'code', '0', 1, 3, now(), now());
 insert into "public"."t_menu" VALUES (100055, 100054, 'add', NULL, NULL, 'variable:add', NULL, '1', 1, NULL, now(), now());
 insert into "public"."t_menu" VALUES (100056, 100054, 'update', NULL, NULL, 'variable:update', NULL, '1', 1, NULL, now(), now());
 insert into "public"."t_menu" VALUES (100057, 100054, 'delete', NULL, NULL, 'variable:delete', NULL, '1', 1, NULL, now(), now());
diff --git a/streampark-console/streampark-console-service/src/assembly/script/upgrade/mysql/1.2.4.sql b/streampark-console/streampark-console-service/src/assembly/script/upgrade/mysql/1.2.4.sql
index 02e9e62cd..5c94e37cc 100644
--- a/streampark-console/streampark-console-service/src/assembly/script/upgrade/mysql/1.2.4.sql
+++ b/streampark-console/streampark-console-service/src/assembly/script/upgrade/mysql/1.2.4.sql
@@ -127,11 +127,14 @@ insert into `t_menu` values (100050, 100048, 'update', null, null, 'member:updat
 insert into `t_menu` values (100051, 100048, 'delete', null, null, 'member:delete', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100052, 100048, 'role view', null, null, 'role:view', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100053, 100001, 'types', null, null, 'user:types', null, '1', 1, null, now(), now());
-insert into `t_menu` VALUES (100054, 100000, 'Variable Management', '/system/variable', 'system/variable/View', 'variable:view', 'code', '0', 1, 3, now(), now());
+insert into `t_menu` VALUES (100054, 100000, 'Variable', '/system/variable', 'system/variable/View', 'variable:view', 'code', '0', 1, 3, now(), now());
 insert into `t_menu` VALUES (100055, 100054, 'add', NULL, NULL, 'variable:add', NULL, '1', 1, NULL, now(), now());
 insert into `t_menu` VALUES (100056, 100054, 'update', NULL, NULL, 'variable:update', NULL, '1', 1, NULL, now(), now());
 insert into `t_menu` VALUES (100057, 100054, 'delete', NULL, NULL, 'variable:delete', NULL, '1', 1, NULL, now(), now());
 
+update `t_menu` set order_num=4 where menu_id=100019;
+update `t_menu` set order_num=5 where menu_id=100034;
+
 -- Add team related sql
 create table `t_team` (
   `id` bigint not null auto_increment comment 'team id',
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/VariableController.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/VariableController.java
similarity index 77%
rename from streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/VariableController.java
rename to streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/VariableController.java
index 85c7d9bd5..3a647fef2 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/VariableController.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/VariableController.java
@@ -15,13 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.streampark.console.system.controller;
+package org.apache.streampark.console.core.controller;
 
+import org.apache.streampark.console.base.domain.ResponseCode;
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.domain.RestResponse;
 import org.apache.streampark.console.base.exception.ApiAlertException;
-import org.apache.streampark.console.system.entity.Variable;
-import org.apache.streampark.console.system.service.VariableService;
+import org.apache.streampark.console.core.entity.Variable;
+import org.apache.streampark.console.core.service.VariableService;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.extern.slf4j.Slf4j;
@@ -38,12 +39,16 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 
+import java.util.regex.Pattern;
+
 @Slf4j
 @Validated
 @RestController
 @RequestMapping("variable")
 public class VariableController {
 
+    private final String formatPattern = "^([A-Za-z])+([A-Za-z0-9._-])+$";
+
     @Autowired
     private VariableService variableService;
 
@@ -87,6 +92,11 @@ public class VariableController {
 
     @PostMapping("check/code")
     public RestResponse checkVariableCode(@RequestParam Long teamId, @NotBlank(message = "{required}") String variableCode) {
+        try {
+            this.checkVariableCodeFormat(variableCode);
+        } catch (ApiAlertException e) {
+            return RestResponse.fail(e.getMessage(), ResponseCode.CODE_FAIL_ALERT);
+        }
         boolean result = this.variableService.findByVariableCode(teamId, variableCode) == null;
         return RestResponse.success(result);
     }
@@ -95,4 +105,13 @@ public class VariableController {
     public RestResponse selectVariables(@RequestParam Long teamId) {
         return RestResponse.success().data(this.variableService.findByTeamId(teamId));
     }
+
+    private void checkVariableCodeFormat(String variableCode) {
+        if (variableCode.length() < 3 || variableCode.length() > 50) {
+            throw new ApiAlertException("Sorry, variable code length should be no less than 3 and no more than 50 characters.");
+        }
+        if (!Pattern.matches(formatPattern, variableCode)) {
+            throw new ApiAlertException("Sorry, variable code can only contain letters, numbers, middle bars, bottom bars and dots, and the beginning can only be letters, For example, kafka_cluster.brokers-520");
+        }
+    }
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/Variable.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Variable.java
similarity index 97%
rename from streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/Variable.java
rename to streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Variable.java
index 8082f8ce6..d78636d3a 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/Variable.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Variable.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.streampark.console.system.entity;
+package org.apache.streampark.console.core.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/VariableMapper.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/mapper/VariableMapper.java
similarity index 92%
rename from streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/VariableMapper.java
rename to streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/mapper/VariableMapper.java
index f7a8c9e57..1676a8eba 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/VariableMapper.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/mapper/VariableMapper.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.streampark.console.system.mapper;
+package org.apache.streampark.console.core.mapper;
 
-import org.apache.streampark.console.system.entity.Variable;
+import org.apache.streampark.console.core.entity.Variable;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/VariableService.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/VariableService.java
similarity index 93%
rename from streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/VariableService.java
rename to streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/VariableService.java
index 3fcfa3dcc..292cfb3f0 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/VariableService.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/VariableService.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.streampark.console.system.service;
+package org.apache.streampark.console.core.service;
 
 import org.apache.streampark.console.base.domain.RestRequest;
-import org.apache.streampark.console.system.entity.Variable;
+import org.apache.streampark.console.core.entity.Variable;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/VariableServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/VariableServiceImpl.java
similarity index 92%
rename from streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/VariableServiceImpl.java
rename to streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/VariableServiceImpl.java
index 491fcf3b2..10cb6f15b 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/VariableServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/VariableServiceImpl.java
@@ -15,16 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.streampark.console.system.service.impl;
+package org.apache.streampark.console.core.service.impl;
 
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.exception.ApiAlertException;
 import org.apache.streampark.console.base.mybatis.pager.MybatisPager;
+import org.apache.streampark.console.core.entity.Variable;
+import org.apache.streampark.console.core.mapper.VariableMapper;
 import org.apache.streampark.console.core.service.ApplicationService;
 import org.apache.streampark.console.core.service.CommonService;
-import org.apache.streampark.console.system.entity.Variable;
-import org.apache.streampark.console.system.mapper.VariableMapper;
-import org.apache.streampark.console.system.service.VariableService;
+import org.apache.streampark.console.core.service.VariableService;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MenuServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MenuServiceImpl.java
index ac92129d5..e923e8023 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MenuServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MenuServiceImpl.java
@@ -70,7 +70,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
             .orElseThrow(() -> new IllegalArgumentException(String.format("The username [%s] not found", username)));
         // Admin has the permission for all menus.
         if (UserType.ADMIN.equals(user.getUserType())) {
-            return this.list(new LambdaQueryWrapper<Menu>().eq(Menu::getType, "0"));
+            return this.list(new LambdaQueryWrapper<Menu>().eq(Menu::getType, "0").orderByAsc(Menu::getOrderNum));
         }
         return this.baseMapper.findUserMenus(username);
     }
diff --git a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
index 22abea803..449af593c 100644
--- a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
+++ b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
@@ -64,7 +64,7 @@ insert into `t_menu` values (100015, 100013, 'Application', '/flink/app', 'flink
 insert into `t_menu` values (100016, 100013, 'Add Application', '/flink/app/add', 'flink/app/Add', 'app:create', '', '0', 0, null, now(), now());
 insert into `t_menu` values (100017, 100013, 'Add Project', '/flink/project/add', 'flink/project/Add', 'project:create', '', '0', 0, null, now(), now());
 insert into `t_menu` values (100018, 100013, 'App Detail', '/flink/app/detail', 'flink/app/Detail', 'app:detail', '', '0', 0, null, now(), now());
-insert into `t_menu` values (100019, 100013, 'Notebook', '/flink/notebook/view', 'flink/notebook/Submit', 'notebook:submit', 'read', '0', 1, 3, now(), now());
+insert into `t_menu` values (100019, 100013, 'Notebook', '/flink/notebook/view', 'flink/notebook/Submit', 'notebook:submit', 'read', '0', 1, 4, now(), now());
 insert into `t_menu` values (100020, 100013, 'Edit Flink App', '/flink/app/edit_flink', 'flink/app/EditFlink', 'app:update', '', '0', 0, null, now(), now());
 insert into `t_menu` values (100021, 100013, 'Edit StreamPark App', '/flink/app/edit_streampark', 'flink/app/EditStreamPark', 'app:update', '', '0', 0, null, now(), now());
 insert into `t_menu` values (100022, 100014, 'build', null, null, 'project:build', null, '1', 1, null, now(), now());
@@ -79,7 +79,7 @@ insert into `t_menu` values (100030, 100015, 'backup rollback', null, null, 'bac
 insert into `t_menu` values (100031, 100015, 'backup delete', null, null, 'backup:delete', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100032, 100015, 'conf delete', null, null, 'conf:delete', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100033, 100015, 'flame Graph', null, null, 'app:flameGraph', null, '1', 1, null, now(), now());
-insert into `t_menu` values (100034, 100013, 'Setting', '/flink/setting', 'flink/setting/View', 'setting:view', 'setting', '0', 1, 4, now(), now());
+insert into `t_menu` values (100034, 100013, 'Setting', '/flink/setting', 'flink/setting/View', 'setting:view', 'setting', '0', 1, 5, now(), now());
 insert into `t_menu` values (100035, 100034, 'Setting Update', null, null, 'setting:update', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100036, 100013, 'Edit Project', '/flink/project/edit', 'flink/project/Edit', 'project:update', null, '0', 0, null, now(), now());
 insert into `t_menu` values (100037, 100015, 'delete', null, null, 'app:delete', null, '1', 1, null, now(), now());
@@ -99,7 +99,7 @@ insert into `t_menu` values (100050, 100048, 'update', null, null, 'member:updat
 insert into `t_menu` values (100051, 100048, 'delete', null, null, 'member:delete', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100052, 100048, 'role view', null, null, 'role:view', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100053, 100001, 'types', null, null, 'user:types', null, '1', 1, null, now(), now());
-insert into `t_menu` VALUES (100054, 100000, 'Variable Management', '/system/variable', 'system/variable/View', 'variable:view', 'code', '0', 1, 3, now(), now());
+insert into `t_menu` VALUES (100054, 100013, 'Variable', '/system/variable', 'system/variable/View', 'variable:view', 'code', '0', 1, 3, now(), now());
 insert into `t_menu` VALUES (100055, 100054, 'add', NULL, NULL, 'variable:add', NULL, '1', 1, NULL, now(), now());
 insert into `t_menu` VALUES (100056, 100054, 'update', NULL, NULL, 'variable:update', NULL, '1', 1, NULL, now(), now());
 insert into `t_menu` VALUES (100057, 100054, 'delete', NULL, NULL, 'variable:delete', NULL, '1', 1, NULL, now(), now());
diff --git a/streampark-console/streampark-console-service/src/main/resources/mapper/system/VariableMapper.xml b/streampark-console/streampark-console-service/src/main/resources/mapper/core/VariableMapper.xml
similarity index 95%
rename from streampark-console/streampark-console-service/src/main/resources/mapper/system/VariableMapper.xml
rename to streampark-console/streampark-console-service/src/main/resources/mapper/core/VariableMapper.xml
index f6aae7363..397731bfb 100644
--- a/streampark-console/streampark-console-service/src/main/resources/mapper/system/VariableMapper.xml
+++ b/streampark-console/streampark-console-service/src/main/resources/mapper/core/VariableMapper.xml
@@ -18,8 +18,8 @@
 
 -->
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.apache.streampark.console.system.mapper.VariableMapper">
-    <resultMap id="VariableMap" type="org.apache.streampark.console.system.entity.Variable">
+<mapper namespace="org.apache.streampark.console.core.mapper.VariableMapper">
+    <resultMap id="VariableMap" type="org.apache.streampark.console.core.entity.Variable">
         <result column="id" jdbcType="BIGINT" property="id"/>
         <result column="variable_code" jdbcType="VARCHAR" property="variableCode"/>
         <result column="variable_value" jdbcType="VARCHAR" property="variableValue"/>
diff --git a/streampark-console/streampark-console-webapp/src/views/system/variable/Add.vue b/streampark-console/streampark-console-webapp/src/views/system/variable/Add.vue
index da9f081da..d4700c14c 100644
--- a/streampark-console/streampark-console-webapp/src/views/system/variable/Add.vue
+++ b/streampark-console/streampark-console-webapp/src/views/system/variable/Add.vue
@@ -39,7 +39,7 @@
         :help="help">
         <a-input
           @blur="handleVariableCodeBlur"
-          v-decorator="['variableCode', {rules: [{ required: true, max: 50, message: 'please enter Variable Code'}]}]" />
+          v-decorator="['variableCode', {rules: [{ required: true, message: 'please enter Variable Code'}]}]" />
       </a-form-item>
       <a-form-item
         label="Variable Value"
@@ -127,15 +127,21 @@ export default {
     handleVariableCodeBlur (e) {
       const variableCode = (e && e.target.value) || ''
       if (variableCode.length) {
-        if (variableCode.length > 100) {
+        this.validateStatus = 'validating'
+        if (variableCode.length < 3 || variableCode.length > 50) {
           this.validateStatus = 'error'
-          this.help = 'Variable Code should not be longer than 100 characters'
+          this.help = 'Sorry, variable code length should be no less than 3 and no more than 50 characters.'
+        } else if (!new RegExp(/^([A-Za-z])+([A-Za-z0-9._-])+$/).test(variableCode)) {
+          this.validateStatus = 'error'
+          this.help = 'Sorry, variable code can only contain letters, numbers, middle bars, bottom bars and dots, and the beginning can only be letters, For example, kafka_cluster.brokers-520'
         } else {
-          this.validateStatus = 'validating'
           checkVariableCode({
             variableCode: variableCode
           }).then((resp) => {
-            if (resp.data) {
+            if (resp.status !== 'success') {
+              this.validateStatus = 'error'
+              this.help = resp.message
+            } else if (resp.data) {
               this.validateStatus = 'success'
               this.help = ''
             } else {