当前位置:首页 > 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中存储用户权限信息,方便全局访问和更新。

vue怎么实现权限路由

// 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'])
}

按钮级权限控制

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

vue怎么实现权限路由

// 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": [...]
      }
    ]
  }
}

权限变更处理

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

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

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

相关文章

动态路由的实现vue

动态路由的实现vue

动态路由的实现(Vue) 在Vue中实现动态路由通常涉及以下方法: 基于路由参数(params) 在路由配置中使用动态片段(以冒号开头),例如: const routes = [ { path…

react路由如何使用

react路由如何使用

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

vue实现列表权限

vue实现列表权限

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

vue路由实现登录

vue路由实现登录

路由守卫实现登录验证 在Vue项目中,可以通过路由守卫(Navigation Guards)来实现登录验证逻辑。路由守卫能在路由跳转前、跳转后或跳转时进行拦截处理。 安装路由依赖 npm inst…

vue路由怎么实现

vue路由怎么实现

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

php 路由实现的

php 路由实现的

PHP 路由实现方法 基于原生 PHP 实现路由 创建一个简单的路由解析器,通过解析 URL 路径来调用对应的控制器或函数。 // 定义路由表 $routes = [ '/' =>…