当前位置:首页 > VUE

vue权限实现

2026-02-10 01:46:09VUE

权限控制实现方式

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()
  }
})

页面元素权限

vue权限实现

  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 observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.conf…

proxy实现vue

proxy实现vue

使用 Proxy 实现 Vue 响应式系统 Vue 3 的响应式系统基于 JavaScript 的 Proxy API,通过代理对象实现对属性的拦截和依赖追踪。以下是实现的核心逻辑: 创建响…

vue实现滚屏

vue实现滚屏

实现滚屏的基本方法 在Vue中实现滚屏效果可以通过多种方式完成,常见的有原生JavaScript滚动方法、第三方库或CSS动画。以下是几种常见实现方式: 使用window.scrollTo或Elem…

实现vue vm

实现vue vm

Vue VM 实现方法 Vue VM(ViewModel)是 Vue.js 的核心概念之一,负责连接视图(View)和数据模型(Model)。以下是实现 Vue VM 的几种方法: 使用 Vue 实…

vue 实现文字滚动

vue 实现文字滚动

Vue 实现文字滚动效果 使用CSS动画实现 通过CSS的@keyframes和transform属性实现文字滚动效果: <template> <div class="scro…