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