当前位置:首页 > VUE

vue怎么实现权限路由

2026-02-21 17:25:51VUE

Vue 权限路由实现方法

基于路由守卫的动态权限控制

在路由配置中定义 meta 字段,标记需要权限的路由。通过全局前置守卫 beforeEach 进行权限校验。

// router.js
const routes = [
  {
    path: '/admin',
    component: Admin,
    meta: { requiresAuth: true, roles: ['admin'] }
  }
]

router.beforeEach((to, from, next) => {
  const userRoles = store.getters.roles // 从Vuex获取用户角色
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!userRoles) {
      next('/login')
    } else if (to.meta.roles && !to.meta.roles.some(role => userRoles.includes(role))) {
      next('/403') // 无权限页面
    } else {
      next()
    }
  } else {
    next()
  }
})

动态路由表生成

根据用户权限动态生成路由表,通常在后端返回权限数据后处理。

// 过滤异步路由表
function filterAsyncRoutes(routes, roles) {
  const res = []
  routes.forEach(route => {
    const tmp = { ...route }
    if (hasPermission(roles, tmp)) {
      if (tmp.children) {
        tmp.children = filterAsyncRoutes(tmp.children, roles)
      }
      res.push(tmp)
    }
  })
  return res
}

// 添加动态路由
store.dispatch('GenerateRoutes', roles).then(accessRoutes => {
  router.addRoutes(accessRoutes)
})

基于Vuex的权限状态管理

在Vuex中存储用户权限信息,方便全局访问和更新。

// store/modules/permission.js
const state = {
  routes: [],
  addRoutes: []
}

const mutations = {
  SET_ROUTES: (state, routes) => {
    state.addRoutes = routes
    state.routes = constantRoutes.concat(routes)
  }
}

菜单权限控制

结合Element UI等组件库,动态渲染侧边栏菜单。

<template>
  <el-menu :default-active="$route.path">
    <sidebar-item 
      v-for="route in permission_routes"
      :key="route.path"
      :item="route"
    />
  </el-menu>
</template>

computed: {
  ...mapGetters(['permission_routes'])
}

按钮级权限控制

通过自定义指令实现按钮级别的权限控制。

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

    if (value && !roles.some(role => value.includes(role))) {
      el.parentNode && el.parentNode.removeChild(el)
    }
  }
})

// 使用方式
<button v-permission="['admin']">删除</button>

后端接口配合

建议采用前后端分离的权限设计,后端返回路由结构或权限标识。

// 典型API响应格式
{
  "code": 200,
  "data": {
    "roles": ["admin"],
    "routes": [
      {
        "path": "/dashboard",
        "component": "Layout",
        "children": [...]
      }
    ]
  }
}

权限变更处理

监听权限变化事件,及时更新路由和界面。

vue怎么实现权限路由

watch: {
  roles(newVal) {
    this.$store.dispatch('GenerateRoutes', newVal).then(() => {
      this.$router.addRoutes(this.$store.getters.addRoutes)
    })
  }
}

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

相关文章

vue指令实现权限

vue指令实现权限

Vue 指令实现权限控制 在 Vue 中,可以通过自定义指令来实现前端权限控制。以下是一种常见的实现方式: 自定义权限指令 // 在 main.js 或单独的文件中定义指令 Vue.directi…

vue路由怎么实现

vue路由怎么实现

Vue 路由实现方法 Vue 路由通常通过 vue-router 库实现,以下是具体实现步骤: 安装 vue-router 在项目中运行以下命令安装 vue-router: npm install…

vue实现路由动画

vue实现路由动画

路由动画的实现方法 在Vue中实现路由动画通常结合<transition>组件和Vue Router的导航守卫。以下是几种常见实现方式: 基础过渡动画 <template>…

vue的路由实现

vue的路由实现

Vue 路由的实现方式 Vue 路由通常通过 Vue Router 实现,这是 Vue.js 官方提供的路由管理器。以下是 Vue 路由的核心实现步骤和配置方法。 安装 Vue Router 使用…

Vue前端路由实现

Vue前端路由实现

Vue前端路由的实现方式 Vue前端路由通常通过vue-router库实现,它是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是核心实现方法和步骤: 安装vue-router 通过…

vue实现多级路由

vue实现多级路由

Vue 实现多级路由的方法 使用嵌套路由 在 Vue Router 中,可以通过 children 属性实现多级路由嵌套。在路由配置中,父路由的 children 数组包含子路由配置,子路由的路径会自…