当前位置:首页 > 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 实现放大缩小功能 在 Vue 中实现放大缩小功能可以通过多种方式实现,以下介绍几种常见的方法: 使用 CSS transform 缩放 通过绑定 CSS 的 transform: scale…

vue权限实现

vue权限实现

Vue 权限实现方案 在 Vue 项目中实现权限控制通常涉及前端路由、按钮/组件级权限、动态菜单等方面。以下是几种常见的实现方式: 基于路由的权限控制 通过路由守卫拦截未授权访问,结合动态路由添…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTM…

java如何实现多态

java如何实现多态

多态的概念 多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时,可以产生不同的行为。Java中主要通过方法重写(Override)和接口/抽象类实现多态。 实现多态的…

vue前端实现权限

vue前端实现权限

Vue 前端权限实现方案 路由权限控制 使用 Vue Router 的全局前置守卫 beforeEach 进行路由拦截,结合用户的权限列表过滤可访问路由。 router.beforeEach((t…

vue如何实现图

vue如何实现图

Vue 实现图表的方法 Vue 中实现图表可以通过多种方式,常见的有使用第三方库或自定义实现。以下是几种常见的方法: 使用 ECharts ECharts 是一个功能强大的图表库,支持多种图表类型…