当前位置:首页 > 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实现aop切面

vue实现aop切面

Vue 实现 AOP 切面编程的方法 在 Vue 中实现 AOP(面向切面编程)可以通过多种方式,以下是几种常见的实现方法: 使用 Vue 混入(Mixins) Vue 的混入机制可以用于实现横切…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

实现 vue ssr

实现 vue ssr

Vue SSR 实现方法 Vue SSR(Server-Side Rendering)通过服务器端渲染 Vue 应用,提升首屏加载速度和 SEO 友好性。以下是核心实现方法: 基础配置 安装必要依赖…

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> <…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…