当前位置:首页 > VUE

vue怎么实现权限

2026-02-17 20:58:24VUE

Vue 权限实现方法

路由权限控制

通过路由守卫实现权限控制,在 router.beforeEach 中检查用户权限,动态生成可访问的路由表。结合 addRoutes 动态添加路由。

router.beforeEach((to, from, next) => {
  if (hasToken()) {
    if (to.path === '/login') {
      next('/')
    } else {
      if (hasPermission(to.meta.roles)) {
        next()
      } else {
        next('/403')
      }
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
})

按钮级权限控制

使用自定义指令 v-permission 控制按钮显示,在全局注册指令,根据权限判断是否渲染元素。

vue怎么实现权限

Vue.directive('permission', {
  inserted(el, binding) {
    const { value } = binding
    const roles = store.getters.roles
    if (value && value instanceof Array && value.length > 0) {
      const hasPermission = roles.some(role => value.includes(role))
      if (!hasPermission) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    } else {
      throw new Error('需要指定权限数组')
    }
  }
})

菜单权限控制

从后端获取权限菜单数据,前端根据返回数据递归生成菜单组件。使用 vuex 存储权限信息,通过 getters 获取过滤后的菜单。

// 获取菜单数据
async getMenus() {
  const { data } = await getMenuList()
  const accessedRoutes = filterAsyncRoutes(data)
  commit('SET_ROUTES', accessedRoutes)
}

接口权限控制

在请求拦截器中添加权限验证,检查请求接口是否需要特定权限。对于无权限的请求直接拒绝并提示。

vue怎么实现权限

service.interceptors.request.use(config => {
  if (config.requireAuth && !checkAuth(config.url)) {
    return Promise.reject(new Error('无权限访问'))
  }
  return config
})

权限数据存储

使用 vuex 集中管理权限状态,包括角色、权限列表等信息。通过模块化组织权限相关状态和操作。

const permission = {
  state: {
    roles: [],
    routes: []
  },
  mutations: {
    SET_ROLES: (state, roles) => {
      state.roles = roles
    },
    SET_ROUTES: (state, routes) => {
      state.routes = routes
    }
  }
}

权限验证函数

封装权限验证工具函数,提供角色检查、权限匹配等方法。通过位运算或数组比对实现高效权限验证。

function checkPermission(needRoles, userRoles) {
  if (needRoles.includes('*')) return true
  return needRoles.some(role => userRoles.includes(role))
}

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

相关文章

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的d…

vue实现动态

vue实现动态

Vue 实现动态路由的方法 在 Vue 中实现动态路由通常涉及以下几个关键步骤: 使用 Vue Router 的动态路由匹配 通过 Vue Router 的 :param 语法可以实现动态路由匹配。…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue实现dag

vue实现dag

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

vue实现兼容

vue实现兼容

Vue 兼容性实现方案 Vue.js 的兼容性主要涉及对不同浏览器、Vue 版本以及第三方库的支持。以下是常见的兼容性解决方案: 浏览器兼容性 使用 Babel 转换 ES6+ 代码为 ES5 语…

vue实现eventbus

vue实现eventbus

Vue 中实现 EventBus 在 Vue 中,EventBus 是一种跨组件通信的机制,尤其适用于非父子组件之间的数据传递。以下是实现 EventBus 的几种方法: 方法一:使用 Vue 实例…