当前位置:首页 > VUE

vue怎么实现权限

2026-01-17 04:32:26VUE

Vue 权限实现方法

路由权限控制

使用 vue-routerbeforeEach 钩子进行路由拦截,结合用户角色或权限列表过滤可访问路由。

router.beforeEach((to, from, next) => {
  const hasPermission = checkUserPermission(to.meta.requiresAuth)
  if (to.meta.requiresAuth && !hasPermission) {
    next('/login')
  } else {
    next()
  }
})

动态路由添加

根据用户权限动态生成路由表,通过 router.addRoutes 添加可访问路由。

vue怎么实现权限

// 过滤有权限的路由
const accessedRoutes = asyncRoutes.filter(route => {
  return hasPermission(route.meta.roles)
})
router.addRoutes(accessedRoutes)

指令式权限控制

创建自定义指令 v-permission,用于控制页面元素的显示隐藏。

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

全局权限校验方法

在 Vue 原型上挂载权限校验方法,方便组件内调用。

vue怎么实现权限

Vue.prototype.$_has = function(permission) {
  return this.$store.state.user.permissions.includes(permission)
}

状态管理集成

使用 Vuex 存储用户权限信息,保持权限状态全局可访问。

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

后端配合方案

前端存储权限标识,实际权限校验应由后端接口二次验证,防止前端篡改。

// API 请求拦截器
axios.interceptors.response.use(response => {
  if (response.data.code === 403) {
    router.push('/403')
  }
  return response
})

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

相关文章

vue实现图片轮播

vue实现图片轮播

使用 Swiper 实现图片轮播 安装 Swiper 依赖 npm install swiper 在 Vue 组件中引入 Swiper <template> <div…

vue实现检测数组

vue实现检测数组

Vue 中检测数组变化的方法 Vue 的响应式系统无法直接检测到数组的某些变化,因为 JavaScript 的限制。以下是一些解决方案: 使用 Vue.set 或 this.$set Vue…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框…

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

vue实现弹窗可切换

vue实现弹窗可切换

实现弹窗可切换的 Vue 方案 动态组件切换 通过 Vue 的 <component :is="currentComponent"> 动态加载不同弹窗组件,结合 v-if 控制显示状态。…

vue实现用户信息表

vue实现用户信息表

Vue 实现用户信息表的方法 使用 Vue CLI 创建项目 安装 Vue CLI 并初始化项目: npm install -g @vue/cli vue create user-info-tabl…