当前位置:首页 > VUE

vue权限实现

2026-02-10 01:46:09VUE

权限控制实现方式

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

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 中实现列表项的上移和下移功能,可以通过自定义指令或组件封装的方式完成。以下是两种常见实现方式: 基于数组操作的通用方法 通过操作数组索引实现元素位置交换…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue实现滑块

vue实现滑块

Vue 实现滑块组件的方法 使用原生 HTML 和 Vue 指令 通过 Vue 的 v-model 和事件监听实现基础滑块功能。创建一个包含 input 元素的组件,类型设置为 range,并绑定到…

vue 实现工具

vue 实现工具

Vue 实现工具的方法 使用 Vue 实现工具功能可以通过多种方式完成,具体取决于工具的类型和需求。以下是几种常见的方法: 组件化实现 创建一个独立的 Vue 组件来封装工具功能。例如,实现一个计…

vue实现api

vue实现api

Vue 实现 API 调用 在 Vue 中调用 API 通常涉及使用 axios 或 fetch 发送 HTTP 请求,并结合 Vue 的响应式特性管理数据。以下是常见的实现方式: 安装 axios…

vue实现watch

vue实现watch

监听数据变化 在Vue中,watch用于监听响应式数据的变化并执行回调函数。基本语法如下: watch: { propertyName(newValue, oldValue) { //…