当前位置:首页 > 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 主题切换的实现方法 使用 CSS 变量动态切换主题 定义主题相关的 CSS 变量,通过修改这些变量实现主题切换。在根元素(如 :root)中定义默认主题的变量,在特定类名下定义其他主题的变量。…

vue如何实现计算

vue如何实现计算

Vue 计算属性的实现方法 在 Vue 中,计算属性(computed properties)是一种基于响应式依赖进行缓存的属性,适用于处理复杂逻辑或依赖其他数据属性的场景。以下是实现计算属性的几种方…

vue如何实现轮询

vue如何实现轮询

实现轮询的方法 在Vue中实现轮询可以通过以下几种方式完成,具体选择取决于项目需求和场景。 使用 setInterval 通过 setInterval 定时调用接口或执行任务,适合简单的轮询场景。…

vue如何实现uuid

vue如何实现uuid

生成 UUID 的方法 在 Vue 中生成 UUID 可以通过第三方库或原生 JavaScript 实现。以下是几种常见方法: 使用 uuid 库 安装 uuid 库: npm install u…

vue如何实现ifream

vue如何实现ifream

Vue 中实现 iframe 的方法 在 Vue 中可以通过多种方式实现 iframe 的嵌入和控制。以下是几种常见的方法: 使用 HTML 原生 iframe 标签 在 Vue 模板中直接使用…

vue如何实现绑定

vue如何实现绑定

数据绑定基础 Vue 通过 v-bind 指令实现动态绑定 HTML 属性或组件 prop。基本语法为 v-bind:属性名="表达式",简写为 :属性名="表达式"。例如绑定 class 或 sty…