当前位置:首页 > VUE

Vue怎么实现权限验证

2026-01-21 05:00:03VUE

Vue权限验证实现方法

路由守卫验证

router.js中配置全局前置守卫,通过meta字段标记路由权限要求。检查用户权限是否匹配,未匹配则跳转到登录页或403页面。

router.beforeEach((to, from, next) => {
  const hasToken = localStorage.getItem('token')
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)

  if (requiresAuth && !hasToken) {
    next('/login')
  } else {
    next()
  }
})

动态路由加载

根据用户权限动态生成可访问路由表。先定义完整路由结构,通过addRoutes方法动态添加符合权限的路由。

// 过滤有权限的路由
function filterAsyncRoutes(routes, roles) {
  return routes.filter(route => {
    if (hasPermission(roles, route)) {
      if (route.children) {
        route.children = filterAsyncRoutes(route.children, roles)
      }
      return true
    }
    return false
  })
}

指令级控制

创建v-permission自定义指令,用于控制按钮/元素的显示隐藏。指令内部比对当前用户权限与要求权限。

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

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

API请求拦截

在axios拦截器中检查请求权限。未携带token的请求直接拒绝,已过期的token触发刷新或重新登录流程。

service.interceptors.request.use(
  config => {
    if (store.getters.token) {
      config.headers['Authorization'] = 'Bearer ' + getToken()
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

权限数据存储

使用Vuex集中管理权限状态。包括用户角色、权限列表等信息,并提供权限校验方法供组件调用。

const store = new Vuex.Store({
  state: {
    roles: [],
    permissions: []
  },
  getters: {
    hasPermission: state => permission => {
      return state.permissions.includes(permission)
    }
  }
})

页面元素控制

在组件内使用计算属性控制界面元素的渲染。结合Vuex中的权限状态进行条件判断。

computed: {
  showEditButton() {
    return this.$store.getters.hasPermission('edit')
  }
}

服务端验证配合

前端验证需与后端配合,确保所有关键操作都经过服务端权限校验。前端路由和按钮控制仅作为用户体验优化。

错误处理

统一处理权限不足的异常情况。捕获403错误码时跳转至无权限提示页面,401错误码时清除本地凭证并重定向到登录页。

Vue怎么实现权限验证

service.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 403) {
      router.push('/403')
    }
    return Promise.reject(error)
  }
)

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

相关文章

Vue实现图片 放大

Vue实现图片 放大

Vue实现图片放大功能 使用v-viewer插件 安装v-viewer插件: npm install v-viewer 在main.js中引入并配置: import Viewer from 'v-…

vue实现权限路由

vue实现权限路由

Vue 权限路由实现方法 基于路由元信息(meta)和全局前置守卫 在路由配置中通过 meta 字段标记权限标识,结合 router.beforeEach 实现动态拦截: // router.js…

Vue实现ui界面

Vue实现ui界面

Vue实现UI界面的方法 使用Vue CLI创建项目 通过Vue CLI快速搭建项目基础结构,确保开发环境配置完整。安装完成后运行vue create project-name选择预设配置或手动配置特…

vue权限如何实现

vue权限如何实现

Vue 权限实现方案 在 Vue 项目中实现权限控制通常涉及路由权限、按钮权限和接口权限三个方面。以下是具体实现方法: 路由权限控制 路由权限通常通过动态路由和全局路由守卫实现。用户登录后获取权限列…

vue 实现权限管理

vue 实现权限管理

Vue 权限管理实现方案 权限管理通常分为路由权限和功能权限两部分,以下是具体实现方式: 路由权限控制 动态路由方案 用户登录后获取权限列表,过滤出有权限的路由 使用router.addRoute…

Vue项目实现rem

Vue项目实现rem

Vue 项目中实现 rem 适配方案 在 Vue 项目中实现 rem 适配,主要目的是让页面元素根据屏幕尺寸自动调整大小。以下是几种常见方法: 使用 postcss-pxtorem 插件 安装 po…