兰宝车间质量管理系统-前端
疯狂的狮子Li
2024-12-04 fd01b5a61f1a92db90c00e7bb1b4162a2b61bfa3
update 优化 白名单支持对通配符路径匹配
已修改2个文件
22 ■■■■ 文件已修改
src/permission.ts 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/validate.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.ts
@@ -3,7 +3,7 @@
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';
@@ -11,6 +11,10 @@
NProgress.configure({ showSpinner: false });
const whiteList = ['/login', '/register', '/social-callback'];
const isWhiteList = (path: string) => {
  return whiteList.some(pattern => isPathMatch(pattern, path))
}
router.beforeEach(async (to, from, next) => {
  NProgress.start();
@@ -20,7 +24,7 @@
    if (to.path === '/login') {
      next({ path: '/' });
      NProgress.done();
    } else if (whiteList.indexOf(to.path as string) !== -1) {
    } else if (isWhiteList(to.path)) {
      next();
    } else {
      if (useUserStore().roles.length === 0) {
@@ -49,7 +53,7 @@
    }
  } else {
    // 没有token
    if (whiteList.indexOf(to.path as string) !== -1) {
    if (isWhiteList(to.path)) {
      // 在免登录白名单,直接进入
      next();
    } else {
src/utils/validate.ts
@@ -1,4 +1,16 @@
/**
 * 路径匹配器
 * @param {string} pattern
 * @param {string} path
 * @returns {Boolean}
 */
export function isPathMatch(pattern: string, path: string) {
  const regexPattern = pattern.replace(/\//g, '\\/').replace(/\*\*/g, '.*').replace(/\*/g, '[^\\/]*')
  const regex = new RegExp(`^${regexPattern}$`)
  return regex.test(path)
}
/**
 * 判断url是否是http或https
 * @returns {Boolean}
 * @param url