当前位置:首页 > VUE

vue如何实现权限管理

2026-02-23 16:58:44VUE

路由权限控制

通过Vue Router的全局前置守卫beforeEach实现路由拦截,结合用户角色动态过滤可访问路由表。定义静态路由(如登录页)和动态路由,后者根据用户权限动态加载。

// router/index.js
router.beforeEach((to, from, next) => {
  const hasToken = localStorage.getItem('token')
  if (to.meta.requiresAuth && !hasToken) {
    next('/login')
  } else {
    next()
  }
})

动态菜单生成

根据用户权限数据过滤路由配置,生成侧边栏菜单。使用vuex存储权限列表,通过computed属性动态计算可展示菜单项。

vue如何实现权限管理

// store/modules/permission.js
const filterRoutes = (routes, roles) => {
  return routes.filter(route => {
    if (route.meta && route.meta.roles) {
      return roles.some(role => route.meta.roles.includes(role))
    }
    return true
  })
}

按钮级权限控制

通过自定义指令v-permission实现按钮显隐控制。在指令的inserted钩子中判断当前用户是否拥有该按钮权限。

// directives/permission.js
Vue.directive('permission', {
  inserted(el, binding) {
    const { value } = binding
    const roles = store.getters.roles
    if (value && !roles.includes(value)) {
      el.parentNode.removeChild(el)
    }
  }
})

API请求拦截

在axios拦截器中添加权限验证,无权限的请求直接返回错误。请求头携带token,后端接口进行二次校验。

vue如何实现权限管理

// utils/request.js
service.interceptors.request.use(config => {
  config.headers['Authorization'] = getToken()
  return config
}, error => {
  return Promise.reject(error)
})

权限数据持久化

登录成功后存储权限信息至localStoragevuex,页面刷新时从持久化存储中恢复权限状态。结合vuex-persistedstate插件实现状态持久化。

// store/index.js
import createPersistedState from 'vuex-persistedstate'
export default new Vuex.Store({
  plugins: [createPersistedState({
    key: 'auth',
    paths: ['user', 'permission']
  })]
})

权限更新机制

提供权限刷新接口,当用户权限变更时主动调用接口更新本地权限数据。监听权限变化事件,动态更新路由和菜单。

// utils/auth.js
export function refreshPermission() {
  return request({
    url: '/auth/refresh',
    method: 'post'
  }).then(res => {
    store.dispatch('user/setRoles', res.data.roles)
    return res
  })
}

分享给朋友:

相关文章

vue如何实现拖动

vue如何实现拖动

Vue 实现拖动的几种方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,通过 draggable 属性和相关事件实现拖动功能。 <template> &…

vue如何实现目录组件

vue如何实现目录组件

实现目录组件的基本思路 在Vue中实现目录组件通常需要结合页面内容的结构化数据(如标题层级),通过动态渲染生成可交互的目录。核心步骤包括提取标题、生成目录结构、实现滚动联动等。 提取标题信息 通过d…

vue如何实现两栏布局

vue如何实现两栏布局

使用Flexbox实现两栏布局 Flexbox是CSS3中强大的布局方式,可以轻松实现两栏布局。在Vue中可以直接在组件的style标签中使用。 <template> <div…

vue如何实现滤镜

vue如何实现滤镜

Vue 实现滤镜的方法 在 Vue 中实现滤镜效果可以通过多种方式,以下是常见的几种方法: 使用 CSS filter 属性 通过 CSS 的 filter 属性可以直接为元素添加滤镜效果。在 Vu…

java是如何实现跨平台的

java是如何实现跨平台的

Java 跨平台的实现原理 Java 实现跨平台的核心机制基于 “一次编写,到处运行” 的理念,主要通过以下技术实现: 字节码与 JVM Java 源代码编译后生成字节码(.class 文件),而非…

vue实现权限管理

vue实现权限管理

Vue 权限管理实现方案 权限管理通常分为路由权限和功能权限两部分,以下是常见的实现方式: 路由权限控制 动态路由加载 通过用户角色或权限标识动态生成可访问的路由表。在路由守卫中校验权限: //…