当前位置:首页 > VUE

vue权限实现

2026-02-10 01:46:09VUE

权限控制实现方式

Vue中实现权限控制通常分为前端路由权限和页面元素权限两类。以下是常见的实现方案:

vue权限实现

路由权限控制

  1. 动态路由表 通过用户登录后返回的权限数据,动态生成可访问的路由表。使用router.addRoutes方法添加权限路由。
// 过滤有权限的路由
function filterAsyncRoutes(routes, roles) {
  return routes.filter(route => {
    if (hasPermission(roles, route)) {
      if (route.children) {
        route.children = filterAsyncRoutes(route.children, roles)
      }
      return true
    }
    return false
  })
}
  1. 路由守卫拦截 在全局路由守卫beforeEach中检查目标路由是否在权限列表中。
router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !store.getters.roles.includes(to.meta.role)) {
    next('/403')
  } else {
    next()
  }
})

页面元素权限

  1. 自定义指令控制 创建v-permission指令,根据权限动态显示/隐藏DOM元素。
Vue.directive('permission', {
  inserted(el, binding) {
    if (!store.getters.roles.includes(binding.value)) {
      el.parentNode.removeChild(el)
    }
  }
})
  1. 组件封装 创建权限组件包裹需要控制的内容,通过v-if判断。
<template>
  <auth :value="'admin'">
    <button>删除</button>
  </auth>
</template>

<script>
export default {
  props: ['value'],
  computed: {
    hasPermission() {
      return this.$store.getters.roles.includes(this.value)
    }
  },
  render() {
    return this.hasPermission ? this.$slots.default[0] : null
  }
}
</script>

权限数据管理

  1. 权限数据结构 通常采用树形结构存储权限信息,包含路由名称、操作权限标识等字段。
{
  id: 1,
  name: 'dashboard',
  meta: { title: 'Dashboard', icon: 'dashboard' },
  children: [
    {
      id: 2,
      name: 'admin',
      meta: { title: 'Admin', role: 'admin' }
    }
  ]
}
  1. 状态管理 使用Vuex集中管理权限状态,确保全局访问一致性。
const store = new Vuex.Store({
  state: {
    roles: []
  },
  mutations: {
    SET_ROLES(state, roles) {
      state.roles = roles
    }
  }
})

最佳实践建议

  • 权限验证应同时在前端和后端实现,前端控制展示,后端校验请求
  • 敏感操作必须经过服务端二次验证
  • 对无权限访问尝试应统一跳转至403页面
  • 权限变更后需要刷新页面或重新获取权限数据
  • 开发环境可配置权限开关便于调试

vue权限实现

标签: 权限vue
分享给朋友:

相关文章

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click…

vue computed 实现

vue computed 实现

computed 的基本用法 在 Vue 中,computed 用于声明计算属性,这些属性基于响应式依赖进行缓存。只有当依赖发生变化时,计算属性才会重新计算。 new Vue({ data:…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建…

vue实现动画

vue实现动画

Vue 实现动画的方法 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及直接操作 CSS 或 JavaScript 动画。 使用 Vue 内置过渡系统 Vue 的 <…

vue实现groupbox

vue实现groupbox

Vue 实现 GroupBox 组件 在 Vue 中实现类似 GroupBox 的效果可以通过自定义组件完成。GroupBox 通常是一个带有标题的边框容器,用于将相关控件分组显示。 基本实现方法…