当前位置:首页 > VUE

vue权限实现

2026-03-27 10:59:19VUE

路由权限控制

使用Vue Router的导航守卫(navigation guards)进行路由权限控制。在路由配置中为需要权限的路由添加meta字段,标记所需权限。

const router = new VueRouter({
  routes: [
    {
      path: '/admin',
      component: Admin,
      meta: { requiresAuth: true, roles: ['admin'] }
    }
  ]
})

router.beforeEach((to, from, next) => {
  const currentUser = store.getters.currentUser
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)

  if (requiresAuth && !currentUser) {
    next('/login')
  } else if (to.meta.roles && !to.meta.roles.includes(currentUser.role)) {
    next('/403')
  } else {
    next()
  }
})

组件级权限控制

创建自定义指令v-permission,用于控制组件级别的显示权限。在全局或局部注册该指令。

vue权限实现

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

    if (value && value instanceof Array && value.length > 0) {
      const hasPermission = permissions.some(perm => {
        return value.includes(perm)
      })

      if (!hasPermission) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    } else {
      throw new Error('需要权限数组')
    }
  }
})

动态菜单生成

根据用户权限动态生成可访问的菜单列表。在Vuex中存储用户权限信息,通过计算属性过滤菜单。

computed: {
  accessibleRoutes() {
    return this.allRoutes.filter(route => {
      if (!route.meta || !route.meta.roles) return true
      return route.meta.roles.includes(this.currentUser.role)
    })
  }
}

API请求拦截

在axios拦截器中添加权限验证,确保只有有权限的用户才能访问受保护的API。

vue权限实现

axios.interceptors.request.use(config => {
  const token = store.getters.token
  if (token) {
    config.headers['Authorization'] = `Bearer ${token}`
  }
  return config
}, error => {
  return Promise.reject(error)
})

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

按钮级权限控制

创建权限检查函数,用于控制按钮的显示和功能可用性。

methods: {
  checkPermission(permission) {
    return this.$store.getters.permissions.includes(permission)
  }
}

在模板中使用该函数控制按钮显示:

<button v-if="checkPermission('user:delete')">删除用户</button>

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

相关文章

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…

vue 实现excel

vue 实现excel

Vue 实现 Excel 功能 前端导出 Excel 使用 xlsx 库可以轻松实现前端 Excel 导出功能。安装依赖: npm install xlsx 导出 Excel 示例代码: impo…

vue实现login

vue实现login

Vue 实现登录功能 在 Vue 中实现登录功能通常需要以下几个步骤: 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,包含用户名和密码输入框以及提交按钮。可以使用 Vue 的模板语法和双…

vue实现甘特图

vue实现甘特图

使用 Vue 实现甘特图 基于开源库(如 vue-ganttastic) 安装依赖库: npm install vue-ganttastic 示例代码: <template> &l…