当前位置:首页 > VUE

vue授权功能如何实现

2026-02-22 21:42:40VUE

Vue 授权功能实现方法

基于路由守卫的权限控制

安装 Vue Router 并配置路由守卫,在路由跳转前校验权限:

// router.js
const router = new VueRouter({...})

router.beforeEach((to, from, next) => {
  const hasPermission = checkUserPermission(to.meta.requiresAuth)
  if (to.meta.requiresAuth && !hasPermission) {
    next('/login')
  } else {
    next()
  }
})

路由配置中添加元信息标记需要权限的页面:

{
  path: '/admin',
  component: AdminPanel,
  meta: { requiresAuth: true }
}

使用自定义指令控制元素显示

创建全局指令控制界面元素显隐:

// main.js
Vue.directive('permission', {
  inserted(el, binding) {
    if (!checkPermission(binding.value)) {
      el.parentNode.removeChild(el)
    }
  }
})

模板中使用指令:

<button v-permission="'create_user'">创建用户</button>

状态管理集成权限数据

Vuex 存储权限信息并提供校验方法:

// store.js
export default new Vuex.Store({
  state: {
    permissions: []
  },
  getters: {
    hasPermission: state => permission => {
      return state.permissions.includes(permission)
    }
  }
})

组件中使用:

vue授权功能如何实现

computed: {
  canEdit() {
    return this.$store.getters.hasPermission('edit_content')
  }
}

动态菜单生成

根据权限过滤可访问的路由:

function filterRoutes(routes, permissions) {
  return routes.filter(route => {
    if (route.meta && route.meta.permission) {
      return permissions.includes(route.meta.permission)
    }
    return true
  })
}

服务端权限验证

前端请求携带 token:

axios.interceptors.request.use(config => {
  config.headers.Authorization = `Bearer ${getToken()}`
  return config
})

处理 403 响应:

axios.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 403) {
      // 处理权限不足情况
    }
    return Promise.reject(error)
  }
)

JWT 认证方案

登录后存储 token:

vue授权功能如何实现

localStorage.setItem('token', response.data.token)

请求时携带 token:

axios.get('/api/resource', {
  headers: { 'Authorization': 'Bearer ' + localStorage.getItem('token') }
})

权限数据持久化

使用 vuex-persistedstate 插件:

import createPersistedState from 'vuex-persistedstate'

export default new Vuex.Store({
  plugins: [createPersistedState({
    key: 'auth',
    paths: ['user', 'permissions']
  })]
})

按钮级权限控制

封装权限组件:

Vue.component('permission', {
  props: ['value'],
  render(h) {
    if (checkPermission(this.value)) {
      return this.$slots.default[0]
    }
    return null
  }
})

模板中使用:

<permission value="delete_user">
  <button>删除用户</button>
</permission>

分享给朋友:

相关文章

vue如何实现计算

vue如何实现计算

Vue 实现计算的方法 Vue 提供了多种方式来实现计算逻辑,包括计算属性、方法、侦听器等。以下是几种常见的实现方式: 计算属性(Computed Properties) 计算属性是基于它们的响应式…

vue实现聊天功能

vue实现聊天功能

Vue实现聊天功能的方法 使用WebSocket实现实时通信 安装WebSocket客户端库如socket.io-client,在Vue组件中建立连接。创建一个消息列表和数据输入框,通过WebSock…

vue实现考试多选功能

vue实现考试多选功能

Vue实现考试多选功能 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,结合v-for循环渲染选项列表。示例代码: <template> <div>…

php实现linux关机重启功能

php实现linux关机重启功能

通过PHP执行Linux关机或重启命令 PHP可以通过exec()、shell_exec()或system()等函数调用系统命令实现关机或重启功能,但需注意权限问题。 使用exec函数执行命令 //…

vue实现复选功能

vue实现复选功能

Vue 实现复选功能 基础实现 使用 v-model 绑定到数组实现多选功能。当复选框被选中时,其 value 会被添加到数组中;取消选中时,会从数组中移除。 <template>…

vue实现功能列表

vue实现功能列表

Vue 实现功能列表的方法 在 Vue 中实现功能列表通常涉及数据绑定、列表渲染、事件处理和状态管理。以下是几种常见的方法: 数据驱动列表渲染 使用 v-for 指令可以轻松实现列表渲染。假设有一个…