当前位置:首页 > VUE

vue 实现权限管理

2026-01-17 22:04:42VUE

Vue 权限管理实现方案

权限管理通常分为路由权限功能权限两部分,以下是具体实现方式:

路由权限控制

动态路由方案

  1. 用户登录后获取权限列表,过滤出有权限的路由
  2. 使用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
  })
}

路由守卫控制 在全局前置守卫中检查权限

vue 实现权限管理

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !store.getters.roles.includes(to.meta.role)) {
    next('/403')
  } else {
    next()
  }
})

功能权限控制

自定义指令方式 创建v-permission指令控制元素显示

Vue.directive('permission', {
  inserted(el, binding) {
    if (!store.getters.roles.includes(binding.value)) {
      el.parentNode.removeChild(el)
    }
  }
})

组件方式 封装权限检查组件

vue 实现权限管理

<template>
  <div v-if="checkPermission">
    <slot></slot>
  </div>
</template>

<script>
export default {
  props: ['value'],
  computed: {
    checkPermission() {
      return this.$store.getters.roles.includes(this.value)
    }
  }
}
</script>

权限数据管理

使用Vuex存储权限信息

const store = new Vuex.Store({
  state: {
    roles: []
  },
  mutations: {
    SET_ROLES(state, roles) {
      state.roles = roles
    }
  },
  actions: {
    fetchRoles({ commit }) {
      return getRoles().then(response => {
        commit('SET_ROLES', response.data)
      })
    }
  }
})

按钮级权限控制

方法封装 创建全局方法检查权限

Vue.prototype.$_has = function(permission) {
  return this.$store.getters.roles.includes(permission)
}

// 使用方式
v-if="$this.$_has('admin')"

权限枚举 定义权限常量避免硬编码

export const PERMISSIONS = {
  USER_ADD: 'user:add',
  USER_EDIT: 'user:edit',
  USER_DELETE: 'user:delete'
}

最佳实践建议

  1. 后端返回权限树结构,前端做映射转换
  2. 权限变更时刷新页面或重新获取权限数据
  3. 404页面要做权限过滤处理
  4. 生产环境建议配合后端进行接口级权限校验
  5. 敏感操作需要二次权限确认

实现时可根据项目复杂度选择适合的方案,小型项目可采用简单的前端控制方案,中大型项目建议前后端配合完成完整的权限系统。

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

相关文章

vue实现单选

vue实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选功能。单选按钮的 v…

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &l…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框用…

vue 移动端实现签名

vue 移动端实现签名

Vue 移动端签名实现方法 在移动端实现签名功能,可以通过HTML5的Canvas结合触摸事件完成。以下是具体实现步骤: 使用Canvas绘制签名 安装vue-signature-pad插件或直…

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Toke…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue.js…