当前位置:首页 > 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项目中可以通过自定义指令实现,主要分为全局指令和局部指令两种方式。以下是一个完整的实现方案: 全局权限指令实现 在main.js或单独的文件中定义全局指令:…

Vue实现路由监

Vue实现路由监

Vue实现路由监听的方法 在Vue中,可以通过多种方式监听路由变化,以下是常见的实现方法: 使用Vue Router的全局前置守卫 router.beforeEach((to, from,…

vue路由实现原理

vue路由实现原理

Vue 路由实现原理 Vue Router 是 Vue.js 的官方路由管理器,其核心原理基于前端路由的实现方式,主要包括哈希模式(Hash Mode)和历史模式(History Mode)。 哈希…

vue 路由实现

vue 路由实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的基本步骤: 安装 Vue Router 使用 npm 或 ya…

vue实现路由导航

vue实现路由导航

Vue 路由导航的实现 Vue 中实现路由导航通常使用 Vue Router 库。以下是具体实现方法: 安装 Vue Router 在项目中安装 Vue Router 依赖: npm inst…

vue路由可以实现什么

vue路由可以实现什么

Vue 路由的核心功能 Vue Router 是 Vue.js 官方的路由管理器,主要用于构建单页面应用(SPA)。它通过管理 URL 与组件的映射关系,实现页面间的无刷新跳转。 路由的基本实现 动…