当前位置:首页 > 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怎么实现权限验证

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集中管理权限状态。包括用户角色、权限列表等信息,并提供权限校验方法供组件调用。

Vue怎么实现权限验证

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错误码时清除本地凭证并重定向到登录页。

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

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

相关文章

vue实现权限

vue实现权限

Vue 实现权限管理的方法 在 Vue 项目中实现权限管理通常涉及路由控制、按钮权限和接口权限。以下是几种常见的实现方式: 路由权限控制 通过动态路由的方式,根据用户权限加载不同的路由配置。可以使用…

Vue中实现路由

Vue中实现路由

Vue 路由的实现方法 在 Vue 中实现路由通常使用 Vue Router 库。以下是具体的实现步骤: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Router:…

Vue实现时钟

Vue实现时钟

Vue实现时钟的方法 使用Vue实现时钟可以通过多种方式完成,以下是几种常见的实现方法: 使用Date对象和setInterval 通过JavaScript的Date对象获取当前时间,并使用set…

Vue拖拽怎么实现

Vue拖拽怎么实现

Vue拖拽实现方法 使用Vue实现拖拽功能可以通过原生HTML5的拖拽API或第三方库如vuedraggable来实现。以下是两种常见的方法: 使用HTML5拖拽API HTML5提供了原生的拖拽…

vue操作权限实现

vue操作权限实现

Vue 权限控制实现方案 Vue 中实现权限控制通常涉及前端路由、按钮/组件级权限、接口权限等多个层面。以下是常见的实现方法: 路由权限控制 通过动态路由实现,根据用户权限过滤可访问的路由:…

Vue实现整体缩小

Vue实现整体缩小

Vue实现整体缩放的常见方法 使用CSS transform属性 在Vue组件的样式中添加transform属性可以实现整体缩放效果。这种方法不会影响页面布局,仅改变视觉呈现。 .scale-co…