From fb7bca27eb17aedf33fe5a1e9be63eb43ec299eb Mon Sep 17 00:00:00 2001
From: QianRj <14974713+qianrj@user.noreply.gitee.com>
Date: 星期四, 06 二月 2025 20:20:40 +0800
Subject: [PATCH] fix 修复 路由守卫白名单通配符正则覆盖问题

---
 src/utils/validate.ts |   58 +++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 37 insertions(+), 21 deletions(-)

diff --git a/src/utils/validate.ts b/src/utils/validate.ts
index c1752fa..e2886e4 100644
--- a/src/utils/validate.ts
+++ b/src/utils/validate.ts
@@ -1,10 +1,26 @@
 /**
+ * 璺緞鍖归厤鍣�
+ * @param {string} pattern
+ * @param {string} path
+ * @returns {Boolean}
+ */
+export function isPathMatch(pattern: string, path: string) {
+  const regexPattern = pattern
+    .replace(/\//g, '\\/')
+    .replace(/\*\*/g, '__DOUBLE_STAR__')
+    .replace(/\*/g, '[^\\/]*')
+    .replace(/__DOUBLE_STAR__/g, '.*');
+  const regex = new RegExp(`^${regexPattern}$`);
+  return regex.test(path);
+}
+
+/**
  * 鍒ゆ柇url鏄惁鏄痟ttp鎴杊ttps
  * @returns {Boolean}
  * @param url
  */
 export const isHttp = (url: string): boolean => {
-	return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1;
+  return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1;
 };
 
 /**
@@ -13,7 +29,7 @@
  * @returns {Boolean}
  */
 export const isExternal = (path: string) => {
-	return /^(https?:|mailto:|tel:)/.test(path);
+  return /^(https?:|mailto:|tel:)/.test(path);
 };
 
 /**
@@ -21,8 +37,8 @@
  * @returns {Boolean}
  */
 export const validUsername = (str: string) => {
-	const valid_map = ['admin', 'editor'];
-	return valid_map.indexOf(str.trim()) >= 0;
+  const valid_map = ['admin', 'editor'];
+  return valid_map.indexOf(str.trim()) >= 0;
 };
 
 /**
@@ -30,9 +46,9 @@
  * @returns {Boolean}
  */
 export const validURL = (url: string) => {
-	const reg =
-		/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
-	return reg.test(url);
+  const reg =
+    /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
+  return reg.test(url);
 };
 
 /**
@@ -40,8 +56,8 @@
  * @returns {Boolean}
  */
 export const validLowerCase = (str: string) => {
-	const reg = /^[a-z]+$/;
-	return reg.test(str);
+  const reg = /^[a-z]+$/;
+  return reg.test(str);
 };
 
 /**
@@ -49,8 +65,8 @@
  * @returns {Boolean}
  */
 export const validUpperCase = (str: string) => {
-	const reg = /^[A-Z]+$/;
-	return reg.test(str);
+  const reg = /^[A-Z]+$/;
+  return reg.test(str);
 };
 
 /**
@@ -58,8 +74,8 @@
  * @returns {Boolean}
  */
 export const validAlphabets = (str: string) => {
-	const reg = /^[A-Za-z]+$/;
-	return reg.test(str);
+  const reg = /^[A-Za-z]+$/;
+  return reg.test(str);
 };
 
 /**
@@ -67,9 +83,9 @@
  * @returns {Boolean}
  */
 export const validEmail = (email: string) => {
-	const reg =
-		/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
-	return reg.test(email);
+  const reg =
+    /^(([^<>()\]\\.,;:\s@"]+(\.[^<>()\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+  return reg.test(email);
 };
 
 /**
@@ -77,7 +93,7 @@
  * @returns {Boolean}
  */
 export const isString = (str: any) => {
-	return typeof str === 'string' || str instanceof String;
+  return typeof str === 'string' || str instanceof String;
 };
 
 /**
@@ -85,8 +101,8 @@
  * @returns {Boolean}
  */
 export const isArray = (arg: string | string[]) => {
-	if (typeof Array.isArray === 'undefined') {
-		return Object.prototype.toString.call(arg) === '[object Array]';
-	}
-	return Array.isArray(arg);
+  if (typeof Array.isArray === 'undefined') {
+    return Object.prototype.toString.call(arg) === '[object Array]';
+  }
+  return Array.isArray(arg);
 };

--
Gitblit v1.9.3