当前位置:首页 > VUE

vue权限控制实现

2026-02-20 03:40:49VUE

vue权限控制实现方法

路由权限控制

通过路由守卫进行权限验证,在路由配置中添加meta字段标记权限标识。

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

router.beforeEach((to, from, next) => {
  const hasToken = localStorage.getItem('token')
  const userRoles = getUserRoles() // 获取用户角色

  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!hasToken) {
      next('/login')
    } else if (to.meta.roles && !to.meta.roles.some(role => userRoles.includes(role))) {
      next('/403') // 无权限页面
    } else {
      next()
    }
  } else {
    next()
  }
})

按钮级权限控制

使用自定义指令v-permission控制按钮显示。

vue权限控制实现

// main.js
Vue.directive('permission', {
  inserted: function (el, binding) {
    const permissions = store.getters.permissions
    if (!permissions.includes(binding.value)) {
      el.parentNode.removeChild(el)
    }
  }
})

// 组件中使用
<button v-permission="'user:add'">添加用户</button>

动态菜单生成

根据用户权限过滤路由生成菜单。

// 过滤异步路由
function filterAsyncRoutes(routes, roles) {
  return routes.filter(route => {
    if (route.meta && route.meta.roles) {
      return roles.some(role => route.meta.roles.includes(role))
    } else {
      return true
    }
  })
}

API请求拦截

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

vue权限控制实现

axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token')
  if (token) {
    config.headers['Authorization'] = 'Bearer ' + token
  }
  return config
}, error => {
  return Promise.reject(error)
})

状态管理集成

使用Vuex集中管理权限状态。

// store.js
const store = new Vuex.Store({
  state: {
    permissions: []
  },
  mutations: {
    SET_PERMISSIONS(state, permissions) {
      state.permissions = permissions
    }
  },
  actions: {
    async getPermissions({ commit }) {
      const res = await api.getPermissions()
      commit('SET_PERMISSIONS', res.data)
    }
  }
})

权限数据格式

建议的权限数据结构。

{
  "roles": ["admin", "editor"],
  "permissions": [
    "user:add",
    "user:edit",
    "article:delete"
  ]
}

实现时需要注意权限数据应通过后端返回,前端仅做展示和控制,实际权限验证应在后端完成。权限变更后需要刷新页面或重新获取权限数据。

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

相关文章

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template…

vue实现摘要

vue实现摘要

Vue 实现摘要的方法 在 Vue 中实现文本摘要功能通常涉及截取文本的前部分内容并添加省略号。可以通过计算属性、过滤器或自定义指令来实现。 计算属性实现 在 Vue 组件中定义一个计算属性,用于截…

django vue实现

django vue实现

Django与Vue.js整合实现方案 Django作为后端框架与Vue.js作为前端框架的整合,可以通过以下方式实现: 分离式开发 前后端完全分离,Django仅提供API接口,Vue.js通过…

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现pwa

vue实现pwa

Vue 实现 PWA 的步骤 Vue 结合 PWA(Progressive Web App)可以创建离线可用的 Web 应用。以下是实现方法: 安装 Vue CLI 并创建项目 确保已安装 Vue…