From 2335157f6e72b84c388baa4285885cab37e62a41 Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: Wed, 04 Dec 2024 08:52:13 +0800
Subject: [PATCH] 白名单支持对通配符路径匹配
---
ruoyi-ui/src/permission.js | 11 ++++++++---
ruoyi-ui/src/utils/validate.js | 18 +++++++++++++++---
2 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js
index 4d3df60..30a3794 100644
--- a/ruoyi-ui/src/permission.js
+++ b/ruoyi-ui/src/permission.js
@@ -4,11 +4,16 @@
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken } from '@/utils/auth'
+import { isPathMatch } from '@/utils/validate'
import { isRelogin } from '@/utils/request'
NProgress.configure({ showSpinner: false })
-const whiteList = ['/login', '/register']
+const whiteList = ['/login', '/register', '/register*', '/register/*']
+
+const isWhiteList = (path) => {
+ return whiteList.some(pattern => isPathMatch(pattern, path))
+}
router.beforeEach((to, from, next) => {
NProgress.start()
@@ -18,7 +23,7 @@
if (to.path === '/login') {
next({ path: '/' })
NProgress.done()
- } else if (whiteList.indexOf(to.path) !== -1) {
+ } else if (isWhiteList(to.path)) {
next()
} else {
if (store.getters.roles.length === 0) {
@@ -43,7 +48,7 @@
}
} else {
// 没有token
- if (whiteList.indexOf(to.path) !== -1) {
+ if (isWhiteList(to.path)) {
// 在免登录白名单,直接进入
next()
} else {
diff --git a/ruoyi-ui/src/utils/validate.js b/ruoyi-ui/src/utils/validate.js
index 287d518..13b7a15 100644
--- a/ruoyi-ui/src/utils/validate.js
+++ b/ruoyi-ui/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,7 +99,7 @@
* @returns {Boolean}
*/
export function isString(str) {
- return typeof str === 'string' || str instanceof String;
+ return typeof str === 'string' || str instanceof String
}
/**
--
Gitblit v1.9.3