当前位置:首页 > VUE

vue怎么实现权限路由

2026-01-21 01:51:56VUE

Vue 实现权限路由的方法

动态路由加载

通过用户登录后获取的权限信息动态加载路由。使用 router.addRoutes 方法将权限路由添加到路由实例中。

// 用户登录后获取权限列表
const permissionRoutes = [
  {
    path: '/admin',
    component: Admin,
    meta: { requiresAuth: true, roles: ['admin'] }
  }
]

// 动态添加路由
router.addRoutes(permissionRoutes)

路由守卫控制

在全局前置守卫 beforeEach 中检查路由元信息 meta,结合用户权限进行拦截。

vue怎么实现权限路由

router.beforeEach((to, from, next) => {
  const userRoles = store.getters.roles
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)
  const requiredRoles = to.meta.roles

  if (requiresAuth && !userRoles) {
    next('/login')
  } else if (requiredRoles && !requiredRoles.some(role => userRoles.includes(role))) {
    next('/403')
  } else {
    next()
  }
})

权限指令控制

通过自定义指令 v-permission 控制页面元素的显示隐藏。

vue怎么实现权限路由

Vue.directive('permission', {
  inserted(el, binding, vnode) {
    const { value } = binding
    const roles = store.getters.roles

    if (value && value instanceof Array && value.length > 0) {
      const hasPermission = roles.some(role => value.includes(role))

      if (!hasPermission) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    }
  }
})

菜单权限过滤

根据用户权限过滤生成侧边栏菜单,通常与动态路由配合使用。

computed: {
  accessibleRoutes() {
    return this.$store.getters.routes.filter(route => {
      return route.meta && route.meta.roles && route.meta.roles.includes(this.$store.getters.role)
    })
  }
}

服务端控制路由

更安全的做法是由服务端返回权限路由列表,前端完全依赖服务端数据渲染路由。

// 从API获取权限路由
api.getRoutes().then(routes => {
  const accessedRoutes = filterAsyncRoutes(routes)
  router.addRoutes(accessedRoutes)
})

function filterAsyncRoutes(routes) {
  return routes.filter(route => {
    if (hasPermission(route.meta.roles)) {
      if (route.children) {
        route.children = filterAsyncRoutes(route.children)
      }
      return true
    }
    return false
  })
}

注意事项

  1. 权限数据应存储在 Vuex 中保持状态同步
  2. 404 页面路由需最后添加,避免被动态路由覆盖
  3. 页面刷新时需要重新初始化权限路由
  4. 按钮级权限可与指令或组件封装结合使用

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

相关文章

vue路由可以实现什么

vue路由可以实现什么

Vue 路由的核心功能 Vue Router 是 Vue.js 的官方路由库,用于构建单页应用(SPA)。它通过动态映射 URL 到组件,实现页面无刷新跳转和状态管理。 基础路由配置 通过定义路…

vue实现户籍系统路由实现

vue实现户籍系统路由实现

户籍系统路由实现(Vue.js) 户籍系统通常需要管理居民信息、户籍变动、统计查询等功能模块。以下基于Vue Router的实现方案: 路由模块设计 在src/router/index.js中定义核…

vue实现登录权限

vue实现登录权限

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

react如何使用路由

react如何使用路由

使用 React Router 的基本方法 React Router 是 React 应用中实现路由功能的核心库。以下是基本使用方法: 安装 React Router 依赖包: npm insta…

elementui路由

elementui路由

使用Element UI与Vue Router集成 Element UI是一个基于Vue.js的组件库,与Vue Router可以无缝集成。通过Vue Router管理路由,结合Element UI的…

vue实现前端权限

vue实现前端权限

Vue 前端权限实现方案 前端权限控制的核心在于根据用户角色或权限动态控制页面访问、菜单展示和操作按钮。以下是几种常见的实现方式: 基于路由的权限控制 通过路由守卫拦截未授权访问,动态生成可访问路由…