当前位置:首页 > VUE

vue操作权限实现

2026-02-20 06:28:16VUE

Vue 权限控制实现方法

基于路由的权限控制

在路由配置中通过 meta 字段添加权限标识,结合路由守卫进行拦截:

// router.js
const routes = [
  {
    path: '/admin',
    component: AdminPage,
    meta: { requiresAuth: true, roles: ['admin'] }
  }
]

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

指令式权限控制

创建自定义指令控制元素显示:

// main.js
Vue.directive('permission', {
  inserted(el, binding, vnode) {
    const { value } = binding
    const roles = store.getters.roles

    if (value && value instanceof Array && value.length > 0) {
      const hasPermission = roles.some(role => value.includes(role))

      if (!hasPermission) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    }
  }
})

// 使用方式
<button v-permission="['admin']">删除</button>

组件级权限控制

封装权限校验组件:

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

<script>
export default {
  props: {
    required: {
      type: Array,
      required: true
    }
  },
  computed: {
    checkPermission() {
      return this.$store.getters.roles.some(role => 
        this.required.includes(role)
      )
    }
  }
}
</script>

// 使用方式
<permission :required="['admin']">
  <admin-panel />
</permission>

API 请求权限控制

在请求拦截器中添加权限校验:

axios.interceptors.request.use(config => {
  const token = store.getters.token
  if (token) {
    config.headers['Authorization'] = `Bearer ${token}`
  }
  return config
}, error => {
  return Promise.reject(error)
})

axios.interceptors.response.use(response => {
  return response
}, error => {
  if (error.response.status === 403) {
    router.push('/403')
  }
  return Promise.reject(error)
})

动态菜单生成

根据权限动态生成可访问菜单:

vue操作权限实现

computed: {
  accessibleRoutes() {
    return this.allRoutes.filter(route => {
      return !route.meta || !route.meta.roles || 
        route.meta.roles.some(role => this.userRoles.includes(role))
    })
  }
}

注意事项

权限数据应存储在 Vuex 中保持状态同步 后端必须进行二次权限验证 敏感操作需要同时进行前端展示控制和后端接口验证 权限变更后需要刷新页面或清除缓存

标签: 权限操作
分享给朋友:

相关文章

vue实现前端权限

vue实现前端权限

Vue 前端权限实现方案 前端权限控制的核心在于根据用户角色或权限动态控制页面访问、菜单展示和操作按钮。以下是几种常见的实现方式: 基于路由的权限控制 通过路由守卫拦截未授权访问,动态生成可访问路由…

Vue实现按钮权限

Vue实现按钮权限

Vue 按钮权限实现方案 在Vue中实现按钮权限控制通常需要结合后端返回的权限数据,前端根据权限动态渲染或禁用按钮。以下是几种常见实现方式: 基于 v-if 或 v-show 的权限控制 通过自定义…

vue的权限控制实现

vue的权限控制实现

Vue 权限控制实现方法 路由级权限控制 通过路由守卫(beforeEach)实现动态路由过滤,结合用户角色控制可访问路由表。典型代码如下: // router.js router.beforeEa…

vue权限管理如何实现

vue权限管理如何实现

Vue 权限管理实现方法 权限管理是前端开发中的重要环节,Vue 中可以通过多种方式实现权限控制。以下是常见的实现方案: 路由权限控制 通过 Vue Router 的全局守卫和路由配置实现权限过滤。…

vue 权限用组件实现

vue 权限用组件实现

权限组件实现思路 在Vue中实现权限控制通常涉及组件级别的权限管理,核心思路是根据用户角色或权限动态渲染或隐藏组件。以下是几种常见实现方式: 自定义指令方式 创建自定义指令v-permission,…

权限管理实现思路vue

权限管理实现思路vue

基于Vue的权限管理实现思路 角色权限模型设计 构建RBAC(基于角色的访问控制)模型,包含用户、角色、权限三层结构。用户关联角色,角色关联权限菜单或操作权限点。权限数据通常包括路由权限和功能权限两种…