当前位置:首页 > 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中,可以通过多种方式监听路由变化,以下是常见的实现方法: 使用Vue Router的全局前置守卫 router.beforeEach((to, from, nex…

vue路由实现内部切换

vue路由实现内部切换

Vue路由实现内部切换的方法 Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的路由切换方式: 使用<router-link>组件 &l…

vue路由实现

vue路由实现

Vue 路由实现方法 安装 Vue Router 在项目中安装 Vue Router 依赖包: npm install vue-router 配置路由 在 src 目录下创建 router/inde…

vue路由实现滑动

vue路由实现滑动

路由切换滑动动画实现 在Vue中实现路由切换时的滑动动画,可以通过Vue的过渡系统结合CSS动画或第三方库完成。以下是几种常见方法: 使用Vue过渡 + CSS动画 包裹<router-vie…

react如何使用路由

react如何使用路由

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

vue实现列表权限

vue实现列表权限

实现列表权限控制的方法 在Vue中实现列表权限控制通常涉及前端逻辑与后端数据的配合。以下是几种常见方法: 基于角色或权限码的渲染控制 通过v-if或v-show指令根据用户权限动态渲染列表项: &…