当前位置:首页 > VUE

vue实现路由权限控制

2026-02-22 06:06:43VUE

Vue 路由权限控制实现方法

路由守卫全局控制

router/index.js 中通过 beforeEach 钩子进行全局拦截。从本地存储(如 localStorage)获取用户权限信息,与路由元信息 meta.requiresAuth 进行匹配。

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token')
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)

  if (requiresAuth && !isAuthenticated) {
    next('/login')
  } else if (to.path === '/login' && isAuthenticated) {
    next('/dashboard')
  } else {
    next()
  }
})

动态路由表生成

根据用户角色动态生成可访问路由表。先定义基础路由(如登录页),登录后通过 addRoutes 添加权限路由。

// 权限路由配置
const adminRoutes = [...]
const userRoutes = [...]

// 动态添加路由
function generateRoutes(role) {
  const accessRoutes = role === 'admin' ? adminRoutes : userRoutes
  router.addRoutes(accessRoutes)
}

路由元信息控制

在路由配置中使用 meta 字段标记权限要求,结合 v-permission 自定义指令控制界面元素显示。

{
  path: '/admin',
  component: AdminPanel,
  meta: { 
    requiresAuth: true,
    roles: ['admin'] 
  }
}

服务端控制方案

前端传递 token 到服务端,服务端返回用户权限路由表。需配合 JWT 等认证方案实现。

axios.get('/api/user-routes').then(res => {
  const accessedRoutes = res.data
  router.addRoutes(accessedRoutes)
})

按钮级权限控制

通过自定义指令实现按钮粒度的权限控制,在指令中校验用户权限码。

Vue.directive('permission', {
  inserted(el, binding) {
    const hasPermission = checkPermission(binding.value)
    if (!hasPermission) el.parentNode.removeChild(el)
  }
})

权限数据持久化

使用 Vuex 集中管理权限状态,结合 localStorage 实现刷新后权限不丢失。

// store/modules/permission.js
state: {
  routes: [],
  addRoutes: []
},
mutations: {
  SET_ROUTES(state, routes) {
    state.addRoutes = routes
    state.routes = constantRoutes.concat(routes)
  }
}

404页面处理

动态路由添加后需在最后捕获未匹配路由,避免刷新页面时出现 404。

vue实现路由权限控制

{
  path: '*',
  redirect: '/404',
  hidden: true
}

注意事项

  • 路由配置应拆分基础路由和权限路由
  • 动态添加路由需考虑页面刷新场景
  • 按钮权限与路由权限应保持一致
  • 敏感路由需服务端二次验证
  • 权限变更后需及时清理旧路由

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

相关文章

vue 路由 实现

vue 路由 实现

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

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

vue实现户籍系统路由实现

vue实现户籍系统路由实现

Vue 实现户籍系统路由方案 户籍系统通常涉及多层级页面和权限控制,以下是基于 Vue Router 的实现方案: 路由模块配置 在 src/router/index.js 中定义路由结构: co…

vue实现路由管理

vue实现路由管理

Vue 路由管理实现方法 Vue 路由管理通常通过 vue-router 库实现,以下是具体实现方式: 安装 vue-router 通过 npm 或 yarn 安装最新版本: npm instal…

vue script 实现路由

vue script 实现路由

使用 Vue Router 实现路由 在 Vue 项目中,可以通过 Vue Router 实现路由功能。以下是具体实现步骤: 安装 Vue Router npm install vue-route…

vue实现路由后退

vue实现路由后退

路由后退的实现方法 在Vue中实现路由后退功能,可以通过Vue Router提供的方法来完成。以下是几种常见的实现方式: 使用router.go()方法 // 在组件中调用 this.$route…