当前位置: 首页 > news >正文

Vue element admin 直接输入path 权限过滤

菜单权限
store\modules\permisstion.ts -> generateRoutes()

按钮权限
directive\permission\index.ts

路由权限
plugins\permission.ts

permission.ts 修改如下

import type { NavigationGuardNext, RouteLocationNormalized, RouteRecordRaw } from "vue-router";
import NProgress from "@/utils/nprogress";
import { getAccessToken } from "@/utils/auth";
import router from "@/router";
import { usePermissionStore, useUserStore } from "@/store";export function setupPermission() {// 白名单路由const whiteList = ["/login", "/datav"];router.beforeEach(async (to, from, next) => {// 开始进度条NProgress.start();const isLogin = !!getAccessToken(); // 判断是否登录if (isLogin) {if (to.path === "/login") {// 已登录,访问登录页,跳转到首页next({ path: "/" });} else {const permissionStore = usePermissionStore();console.log("permissionStore", permissionStore);// 判断路由是否加载完成if (permissionStore.isRoutesLoaded) {if (to.matched.length === 0) {// 路由未匹配,跳转到404next("/404");} else {// console.log("to", to);// 动态设置页面标题const title = (to.params.title as string) || (to.query.title as string);if (title) {to.meta.title = title;}next();}} else {try {// 生成动态路由 -- 直接游览器里输入地址会走到这边const dynamicRoutes = await permissionStore.generateRoutes();// console.log("to", to.path);// console.log("permissionStore.routes Array", permissionStore.routes);// permissionStore.routes.forEach((route: RouteRecordRaw) => {//   console.log("permissionStore.route", route.path);//// });// 在此处进行判断,要等 permissionStore.generateRoutes(); 执行完 permissionStore.routes 才有值const routeExists = permissionStore.routes.some((route: RouteRecordRaw) => {//console.log("permissionStore.route", route.path);//看用户可访问的所有 path 里面,是否有浏览器直接输入的 path ,如果包含,说明用户无权访问该菜单return route.path.includes(to.path);});if (!routeExists) {next("/401");}// console.log("dynamicRoutes", dynamicRoutes);// console.log("router", router);dynamicRoutes.forEach((route: RouteRecordRaw) => {//console.log("route", route);router.addRoute(route);});// console.log("router", router);// console.log("to", to);next({ ...to, replace: true });} catch (error) {console.error(error);// 路由加载失败,重置 token 并重定向到登录页await useUserStore().clearUserData();redirectToLogin(to, next);NProgress.done();}}}} else {// 未登录,判断是否在白名单中if (whiteList.includes(to.path)) {console.log("router", 5);next();} else {console.log("router", 6);// 不在白名单,重定向到登录页redirectToLogin(to, next);NProgress.done();}}});// 后置守卫,保证每次路由跳转结束时关闭进度条router.afterEach(() => {NProgress.done();});
}// 重定向到登录页
function redirectToLogin(to: RouteLocationNormalized, next: NavigationGuardNext) {const params = new URLSearchParams(to.query as Record<string, string>);const queryString = params.toString();const redirect = queryString ? `${to.path}?${queryString}` : to.path;next(`/login?redirect=${encodeURIComponent(redirect)}`);
}/** 判断是否有权限 */
export function hasAuth(value: string | string[], type: "button" | "role" = "button") {const { roles, perms } = useUserStore().userInfo;// 超级管理员 拥有所有权限if (type === "button" && roles.includes("ROOT")) {return true;}const auths = type === "button" ? perms : roles;return typeof value === "string"? auths.includes(value): value.some((perm) => auths.includes(perm));
}
console.log("to", to.path);
let found = false;
permissionStore.routes.forEach((route: RouteRecordRaw) => {console.log("permissionStore.route", route.path);if (route.path.includes(to.path)) {found = true;}
});if (!found) {next("/404");
}

用 some 优化后

console.log("to", to.path);
const routeExists = permissionStore.routes.some((route: RouteRecordRaw) => {console.log("permissionStore.route", route.path);return route.path.includes(to.path);
});if (!routeExists) {next("/404");
}
http://www.sczhlp.com/news/45719/

相关文章:

  • 云安全漏洞的发现与利用技巧
  • php电商网站开发流程图百度热门搜索排行榜
  • wordpress快速插图百度seo优化排名
  • 搞网站开发的程序员属于哪一类2022年传销最新消息
  • 可以接项目做的网站篮网最新消息
  • 营销平台是什么意思合肥seo排名优化公司
  • P12676 相等排列 (equal)
  • 郴州网站建设方案策划宝安网站建设
  • 网站app怎么做北京关键词优化平台
  • 自己服务器做网站主机汕头seo不错
  • 沙井建网站成都关键词优化报价
  • 电子商务网站建设 教案付费推广有几种方式
  • 做网站推广用自己维护吗百度指数分析报告案例
  • 国内免费图片素材网站域名注册管理中心网站
  • 湖北北京网站建设龙岗网站设计
  • 功能性的网站设计制作什么软件可以发布广告信息
  • 开源的企业网站管理系统广州网络推广
  • 淘客助手 wordpressgoogle seo整站优化
  • 中国疾病预防控制中心seo排名优化首页
  • csp训练计划
  • 校门外的树
  • HPC环境下文件传输指南:保障安全提升性能
  • 向量点乘
  • 修改wordpress后台登陆seo推广seo技术培训
  • 一般做个网站多少做网站多少钱长沙seo优化推广
  • 常州 wordpress上海seo优化bwyseo
  • 塘沽做网站百度一下下载
  • 网站建设入门教程视频无忧seo博客
  • 什么是全网整合营销seo公司怎样找客户
  • 网站建设公司需要申请icp吗校园推广