From 535c5bd814fab51e80fe6eebe711480d362f9e3e Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: 星期三, 04 十二月 2024 08:49:18 +0800
Subject: [PATCH] 白名单支持对通配符路径匹配

---
 src/permission.js     |   14 +++++++++-----
 src/utils/validate.js |   21 +++++++++++++++------
 2 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/src/permission.js b/src/permission.js
index 1afe9cd..a7d9f87 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -3,15 +3,19 @@
 import NProgress from 'nprogress'
 import 'nprogress/nprogress.css'
 import { getToken } from '@/utils/auth'
-import { isHttp } from '@/utils/validate'
+import { isHttp, isPathMatch } from '@/utils/validate'
 import { isRelogin } from '@/utils/request'
 import useUserStore from '@/store/modules/user'
 import useSettingsStore from '@/store/modules/settings'
 import usePermissionStore from '@/store/modules/permission'
 
-NProgress.configure({ showSpinner: false });
+NProgress.configure({ showSpinner: false })
 
-const whiteList = ['/login', '/register'];
+const whiteList = ['/login', '/register']
+
+const isWhiteList = (path) => {
+  return whiteList.some(pattern => isPathMatch(pattern, path))
+}
 
 router.beforeEach((to, from, next) => {
   NProgress.start()
@@ -21,7 +25,7 @@
     if (to.path === '/login') {
       next({ path: '/' })
       NProgress.done()
-    } else if (whiteList.indexOf(to.path) !== -1) {
+    } else if (isWhiteList(to.path)) {
       next()
     } else {
       if (useUserStore().roles.length === 0) {
@@ -50,7 +54,7 @@
     }
   } else {
     // 娌℃湁token
-    if (whiteList.indexOf(to.path) !== -1) {
+    if (isWhiteList(to.path)) {
       // 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝鐩存帴杩涘叆
       next()
     } else {
diff --git a/src/utils/validate.js b/src/utils/validate.js
index 8d32dc0..13b7a15 100644
--- a/src/utils/validate.js
+++ b/src/utils/validate.js
@@ -1,13 +1,25 @@
 /**
+ * 璺緞鍖归厤鍣�
+ * @param {string} pattern
+ * @param {string} path
+ * @returns {Boolean}
+ */
+export function isPathMatch(pattern, path) {
+  const regexPattern = pattern.replace(/\//g, '\\/').replace(/\*\*/g, '.*').replace(/\*/g, '[^\\/]*')
+  const regex = new RegExp(`^${regexPattern}$`)
+  return regex.test(path)
+}
+
+/**
  * 鍒ゆ柇value瀛楃涓叉槸鍚︿负绌� 
  * @param {string} value
  * @returns {Boolean}
  */
 export function isEmpty(value) {
   if (value == null || value == "" || value == undefined || value == "undefined") {
-    return true;
+    return true
   }
-  return false;
+  return false
 }
 
 /**
@@ -87,10 +99,7 @@
  * @returns {Boolean}
  */
 export function isString(str) {
-  if (typeof str === 'string' || str instanceof String) {
-    return true
-  }
-  return false
+  return typeof str === 'string' || str instanceof String
 }
 
 /**

--
Gitblit v1.9.3