当前位置:首页 > 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 中实现选题操作通常涉及数据绑定、事件处理和状态管理。以下是几种常见的实现方式: 单选实现 使用 v-model 绑定单选值,通过 radio 或 select 元素…

vue route实现权限控制

vue route实现权限控制

Vue Router 权限控制实现方法 路由元信息(meta)结合导航守卫 在路由配置中通过 meta 字段标记权限要求,例如需要登录或特定角色: const routes = [ {…

vue权限校验怎么实现

vue权限校验怎么实现

Vue 权限校验实现方法 权限校验是前端开发中常见的需求,Vue 中可以通过多种方式实现。以下是几种常见的实现方案: 路由级别权限控制 通过 Vue Router 的全局前置守卫(beforeEac…

vue 权限用组件实现

vue 权限用组件实现

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

react如何操作引用页面的值

react如何操作引用页面的值

获取引用页面的值 在React中,可以通过useRef钩子或createRef方法创建引用(ref),用于直接访问DOM节点或React组件实例。以下为具体实现方式: 使用函数组件与useRef…

react实现权限控制

react实现权限控制

路由级权限控制 使用 react-router-dom 的 Routes 和自定义组件实现路由拦截。通过高阶组件或自定义 Route 组件包裹需鉴权的路由,检查用户权限后决定是否渲染目标组件或跳转登录…