当前位置:首页 > VUE

vue实现权限控制

2026-02-18 04:40:23VUE

路由权限控制

在Vue中通过路由守卫实现页面级权限控制,常用router.beforeEach全局守卫。定义路由时添加meta字段标记权限要求:

const routes = [
  {
    path: '/admin',
    component: AdminPanel,
    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()
  }
})

组件级权限控制

使用自定义指令v-permission实现按钮/组件级别的控制:

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

    if (value && !roles.some(role => value.includes(role))) {
      el.parentNode && el.parentNode.removeChild(el)
    }
  }
})

模板中使用方式:

<button v-permission="['admin']">删除</button>

动态菜单渲染

根据用户权限过滤导航菜单:

computed: {
  filteredRoutes() {
    return this.routes.filter(route => {
      if (!route.meta || !route.meta.roles) return true
      return route.meta.roles.some(role => this.userRoles.includes(role))
    })
  }
}

API请求拦截

在axios拦截器中添加权限验证:

axios.interceptors.request.use(config => {
  if (config.requiresAuth && !store.getters.token) {
    return Promise.reject(new Error('需要认证'))
  }
  config.headers['X-Access-Token'] = getToken()
  return config
})

权限数据管理

建议使用Vuex集中管理权限状态:

const store = new Vuex.Store({
  state: {
    roles: [],
    permissions: []
  },
  mutations: {
    SET_PERMISSIONS(state, payload) {
      state.permissions = payload
    }
  }
})

服务端配合

前端应配合后端进行权限验证,后端接口应返回:

  • 用户角色信息
  • 权限点列表
  • 401/403状态码处理未授权请求

典型权限数据结构示例:

vue实现权限控制

{
  "roles": ["editor"],
  "permissions": ["article:edit", "user:view"]
}

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

相关文章

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现验证

vue实现验证

Vue 表单验证实现方法 在Vue中实现表单验证可以通过多种方式完成,以下是常见的几种方法: 使用Vuelidate库 Vuelidate是一个轻量级的Vue表单验证库,安装后可以通过简单的配置实现…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue实现精准查询

vue实现精准查询

实现精准查询的方法 在Vue中实现精准查询通常需要结合输入框、数据处理和筛选逻辑。以下是几种常见的方法: 使用计算属性进行筛选 计算属性适合对数据进行实时筛选,响应输入框的变化: <tem…