当前位置:首页 > 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()
  }
})

指令式权限控制

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

vue操作权限实现

// 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>

组件级权限控制

封装权限校验组件:

vue操作权限实现

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

动态菜单生成

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

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项目中可以通过自定义指令实现,主要分为全局指令和局部指令两种方式。以下是一个完整的实现方案: 全局权限指令实现 在main.js或单独的文件中定义全局指令:…

vue实现列表权限

vue实现列表权限

实现列表权限的基本思路 在Vue中实现列表权限通常涉及根据用户角色或权限动态渲染列表内容。核心逻辑是通过权限判断控制列表项的显示、隐藏或操作权限。 权限数据管理 使用Vuex或Pinia存储全局权…

vue前端实现权限

vue前端实现权限

Vue 前端权限实现方案 路由权限控制 使用 Vue Router 的全局前置守卫 beforeEach 进行路由拦截,结合用户的权限列表过滤可访问路由。 router.beforeEach((to…

vue element 实现权限

vue element 实现权限

权限控制实现方式 在Vue项目中使用Element UI实现权限控制通常涉及前端路由权限和界面元素权限两部分。以下是常见的实现方法: 路由权限控制 基于用户角色动态生成可访问路由列表,通过路由守卫…

vue怎么实现权限

vue怎么实现权限

Vue 权限实现方法 路由权限控制 使用 vue-router 的 beforeEach 钩子进行路由拦截,结合用户角色或权限列表过滤可访问路由。 router.beforeEach((to, fr…

vue实现权限登录

vue实现权限登录

权限登录实现方案 在Vue中实现权限登录通常涉及前端路由控制、接口权限验证和动态菜单生成。以下是具体实现方法: 登录认证流程 用户提交登录表单后,向后端发送认证请求 axios.post('/…