当前位置:首页 > 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)
    }
  }
})

组件中使用:

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:

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如何实现mvvm

vue如何实现mvvm

Vue 实现 MVVM 的核心机制 Vue 的 MVVM(Model-View-ViewModel)实现依赖于数据绑定和响应式系统,通过以下核心机制完成: 数据劫持(响应式系统) Vue 使用 O…

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

vue手写签名如何实现

vue手写签名如何实现

实现 Vue 手写签名的步骤 使用 canvas 实现基础签名功能 在 Vue 项目中创建一个组件,利用 HTML5 的 canvas 元素实现手写签名功能。通过监听鼠标或触摸事件来捕获用户的绘制路径…

vue如何实现两栏布局

vue如何实现两栏布局

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

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现linux关机重启功能

php实现linux关机重启功能

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