当前位置:首页 > VUE

vue权限控制实现

2026-01-19 11:20:06VUE

Vue 权限控制实现方法

路由级权限控制

通过路由守卫(beforeEach)实现动态路由过滤,结合用户角色或权限列表控制访问。

// router.js
router.beforeEach((to, from, next) => {
  const hasPermission = checkUserPermission(to.meta.requiredRole)
  if (hasPermission) next()
  else next('/forbidden')
})

function checkUserPermission(requiredRole) {
  const userRoles = store.getters.roles
  return requiredRole ? userRoles.includes(requiredRole) : true
}

组件级权限控制

使用自定义指令v-permission控制组件渲染,适用于按钮/菜单等细粒度控制。

vue权限控制实现

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

    if (!permissions.includes(value)) {
      el.parentNode && el.parentNode.removeChild(el)
    }
  }
})

接口级权限控制

在axios拦截器中校验请求权限,拦截未授权的API调用。

// http.js
service.interceptors.request.use(config => {
  if (config.requiresAuth && !store.getters.token) {
    return Promise.reject(new Error('Need login'))
  }
  return config
})

动态菜单生成

根据权限树动态生成导航菜单,需后端返回权限结构。

vue权限控制实现

// store.js
actions: {
  async generateRoutes({ commit }) {
    const accessedRoutes = await filterAsyncRoutes(asyncRoutes)
    commit('SET_ROUTES', accessedRoutes)
  }
}

权限数据管理

推荐使用Vuex集中管理权限状态,包含以下核心字段:

  • roles: 用户角色数组
  • permissions: 权限标识集合
  • menus: 可访问菜单树

权限指令扩展

对于复杂场景可扩展权限指令,支持角色/权限组合校验。

Vue.directive('permission', {
  inserted(el, binding) {
    const { value } = binding
    const hasPermission = checkPermission(value)
    !hasPermission && el.parentNode.removeChild(el)
  }
})

服务端协作要点

  1. 登录接口需返回用户权限标识
  2. 提供权限树接口供前端生成菜单
  3. 接口层需进行二次权限校验

常见实现方案对比

  • RBAC模型:基于角色的访问控制
  • ABAC模型:基于属性的访问控制
  • ACL模型:访问控制列表

最佳实践建议

  1. 前端权限控制需与后端双重校验
  2. 敏感操作必须服务端验证
  3. 权限数据应加密存储
  4. 定期审计权限分配

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

相关文章

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…

vue实现导入

vue实现导入

Vue 实现文件导入功能 使用 <input type="file"> 元素 在 Vue 模板中添加一个文件输入元素,绑定 change 事件处理函数。 <template>…

vue实现气泡

vue实现气泡

Vue 实现气泡效果的方法 在 Vue 中实现气泡效果可以通过 CSS 动画、第三方库或自定义组件完成。以下是几种常见实现方式: 使用纯 CSS 和 Vue 过渡 通过 Vue 的过渡系统结合 CS…

vue实现联动

vue实现联动

Vue 实现联动效果 联动效果通常指多个组件或表单元素之间相互影响,例如选择省份后动态加载城市列表。Vue 提供了多种方式实现联动,包括数据绑定、计算属性、侦听器等。 数据驱动联动 通过 Vue 的…