当前位置:首页 > 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,结合用户权限进行拦截。

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.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 前端权限实现方案 路由权限控制 通过 Vue Router 的 beforeEach 钩子实现路由拦截,结合用户角色和权限列表进行校验。在路由配置中添加 meta 字段定义所需权限: co…

vue实现路由历史

vue实现路由历史

Vue 实现路由历史管理 在 Vue 中,路由历史管理通常通过 Vue Router 实现。Vue Router 提供了两种历史记录模式:hash 模式和 history 模式。以下是具体实现方法。…

vue路由可以实现什么

vue路由可以实现什么

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

react路由如何使用

react路由如何使用

React 路由的基本使用 React 路由通常通过 react-router-dom 库实现,用于管理单页面应用(SPA)中的页面导航。 安装 react-router-dom: npm i…

vue实现前端路由

vue实现前端路由

Vue 前端路由实现方法 Vue 前端路由可以通过 vue-router 库实现,这是 Vue 官方推荐的路由解决方案。 安装 vue-router 通过 npm 或 yarn 安装 vue-rou…

vue实现路由守卫

vue实现路由守卫

路由守卫的基本概念 路由守卫是Vue Router提供的一种机制,用于在路由跳转前后执行特定的逻辑。它可以用于权限控制、页面访问限制、数据预加载等场景。Vue Router提供了多种路由守卫,包括全局…