当前位置:首页 > VUE

vue实现路由权限控制

2026-01-21 14:43:54VUE

Vue 路由权限控制实现方法

路由权限控制在 Vue 项目中通常通过以下几种方式实现:

路由守卫(全局/局部)

router/index.js 中定义全局前置守卫,通过 to.meta.requiresAuth 判断是否需要登录:

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token')
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

动态路由表

根据用户权限动态生成路由表,结合 router.addRoutes(Vue Router 3.x)或 router.addRoute(Vue Router 4.x):

vue实现路由权限控制

// 获取用户权限后过滤路由
const asyncRoutes = filterAsyncRoutes(router.options.routes, userRoles)
router.addRoutes(asyncRoutes)

function filterAsyncRoutes(routes, roles) {
  return routes.filter(route => {
    if (route.meta && route.meta.roles) {
      return roles.some(role => route.meta.roles.includes(role))
    }
    return true
  })
}

权限指令

自定义指令控制页面元素显示:

Vue.directive('permission', {
  inserted(el, binding) {
    const { value } = binding
    const permissions = store.getters.permissions
    if (!permissions.includes(value)) {
      el.parentNode.removeChild(el)
    }
  }
})

使用方式:<button v-permission="'user:add'">添加</button>

vue实现路由权限控制

服务端返回权限

前端请求接口获取权限数据后存储到 Vuex/Pinia:

// 接口返回数据结构示例
{
  "roles": ["admin"],
  "permissions": ["user:add", "user:edit"]
}

// 在store中保存权限
state: {
  permissions: []
},
mutations: {
  SET_PERMISSIONS(state, permissions) {
    state.permissions = permissions
  }
}

404 页面处理

未匹配路由时重定向到404页面:

const router = new VueRouter({
  routes: [
    // ...其他路由
    { path: '*', redirect: '/404' }
  ]
})

注意事项

  • 权限数据建议持久化存储(如 localStorage)
  • 敏感路由需在后端进行二次验证
  • 动态路由添加后可能需要处理刷新白屏问题
  • Vue Router 4.x 使用 router.addRoute() 而非 addRoutes

以上方法可单独使用或组合使用,具体选择取决于项目复杂度和安全要求。

标签: 路由权限
分享给朋友:

相关文章

vue实现登录权限

vue实现登录权限

Vue 实现登录权限方案 路由守卫控制访问权限 安装vue-router并配置路由守卫,在全局前置守卫中检查用户登录状态和权限。未登录用户访问受限路由时重定向到登录页。 // router.js r…

php 实现路由

php 实现路由

PHP 实现路由的方法 在 PHP 中实现路由功能可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 PHP 实现简单路由 通过解析 URL 并匹配对应的处理逻辑,可以实现基本的路由功能。以…

vue 路由实现机制

vue 路由实现机制

Vue 路由实现机制 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。其核心实现机制主要包括以下几个方面: 路由模式 Vue Router 支持两种路由模式:…

vue路由实现segment

vue路由实现segment

Vue 路由实现 Segment 风格路由 在 Vue Router 中实现类似 Segment 风格的路由(即扁平化、无嵌套的 URL 结构),可以通过动态路由和编程式导航实现。 安装 Vue R…

vue 实现路由弹窗

vue 实现路由弹窗

实现路由弹窗的基本思路 在Vue中实现路由弹窗的核心是利用路由参数或查询参数控制弹窗的显示,同时保持页面URL与弹窗状态的同步。常见方法包括动态路由、嵌套路由或通过<router-view>…

vue动态路由实现

vue动态路由实现

Vue 动态路由实现方法 动态路由是 Vue Router 的核心功能之一,允许根据参数动态匹配路由。以下是几种常见实现方式: 路由参数动态匹配 在路由配置中使用冒号 : 定义动态参数: cons…