当前位置:首页 > VUE

vue route实现权限控制

2026-02-20 22:34:33VUE

Vue Router 实现权限控制的方法

路由元信息(meta)结合导航守卫

在路由配置中通过meta字段标记权限信息,例如requiresAuthroles。在全局前置守卫router.beforeEach中校验用户权限,动态决定跳转逻辑。

const routes = [
  {
    path: '/admin',
    component: AdminPanel,
    meta: { requiresAuth: true, roles: ['admin'] }
  }
]

router.beforeEach((to, from, next) => {
  const userRole = getUserRole() // 获取当前用户角色
  if (to.meta.requiresAuth && !isAuthenticated()) {
    next('/login')
  } else if (to.meta.roles && !to.meta.roles.includes(userRole)) {
    next('/403') // 无权限跳转
  } else {
    next()
  }
})

动态路由表生成

根据用户权限动态生成路由表。初始化时过滤无权限的路由,或通过router.addRoutes添加权限路由(Vue 2.x)。

vue route实现权限控制

// 过滤路由示例
function filterRoutes(routes, roles) {
  return routes.filter(route => {
    if (route.meta?.roles) {
      return roles.some(role => route.meta.roles.includes(role))
    }
    return true
  })
}

// Vue 3.x 动态添加路由
const dynamicRoutes = [
  { path: '/admin', component: Admin, meta: { roles: ['admin'] } }
]
router.removeRoute('admin') // 先移除可能存在的旧路由
router.addRoute(dynamicRoutes[0])

组件级权限控制

在组件内使用自定义指令或函数进行细粒度控制。例如实现v-permission指令:

// 注册全局指令
app.directive('permission', {
  mounted(el, binding) {
    const userRoles = store.getters.roles
    if (!binding.value.some(role => userRoles.includes(role))) {
      el.parentNode.removeChild(el)
    }
  }
})

// 组件中使用
<button v-permission="['admin']">删除</button>

服务端返回路由表

将路由配置存储在服务端,根据用户权限返回对应的路由结构。前端通过router.addRoute动态构建路由。

vue route实现权限控制

// 获取服务端路由配置
axios.get('/api/user-routes').then(response => {
  response.data.forEach(route => {
    router.addRoute(route)
  })
})

404页面处理

动态路由场景下需确保404页面最后添加,避免被提前匹配:

router.addRoute({ path: '/:pathMatch(.*)*', component: NotFound })

权限变更处理

监听权限变化时需重置路由:

watch(() => store.state.roles, (newVal) => {
  resetRouter() // 清空现有路由
  initRoutes(newVal) // 重新初始化
})

标签: 权限vue
分享给朋友:

相关文章

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Toke…

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

vue router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(…

vue翻页实现

vue翻页实现

Vue翻页实现方法 基础分页组件实现 使用v-for和计算属性实现基础分页逻辑: <template> <div> <ul> <li…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…