当前位置:首页 > 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.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。

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)
  }
}

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

vue权限实现

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

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

相关文章

权限管理vue如何实现

权限管理vue如何实现

权限管理在 Vue 中的实现方法 基于路由的权限控制 通过 Vue Router 的全局前置守卫 beforeEach 实现路由拦截,结合用户角色或权限列表动态过滤可访问路由。示例代码: rou…

vue实现换肤

vue实现换肤

使用 CSS 变量实现换肤 在 Vue 项目中,可以通过 CSS 变量(Custom Properties)动态切换主题色。CSS 变量可以在运行时修改,适合实现换肤功能。 定义全局 CSS 变量:…

vue 实现弹窗

vue 实现弹窗

Vue 实现弹窗的方法 在 Vue 中实现弹窗功能可以通过多种方式完成,以下是几种常见的方法: 使用组件和 v-if/v-show 控制显示 创建一个独立的弹窗组件,通过 v-if 或 v-show…

vue  实现分页

vue 实现分页

实现分页的基本思路 在Vue中实现分页通常需要结合后端API返回的数据和前端的分页组件。分页的核心逻辑包括计算总页数、处理当前页码变化以及触发数据请求。 分页组件示例 使用Element UI的分页…

react实现vue

react实现vue

React 实现 Vue 功能 React 和 Vue 是两种不同的前端框架,但可以通过一些方法在 React 中实现 Vue 的特性。以下是几种常见 Vue 功能在 React 中的实现方式: 双…

vue实现spa

vue实现spa

Vue 实现 SPA(单页应用)的步骤 创建 Vue 项目 使用 Vue CLI 快速初始化一个 Vue 项目,确保安装了 Vue Router 作为路由管理工具。运行以下命令创建项目: vue c…