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

模板中使用:

vue授权功能如何实现

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

分享给朋友:

相关文章

vue实现分页功能

vue实现分页功能

Vue 分页功能实现 在 Vue 中实现分页功能通常需要结合后端 API 或前端数据分页逻辑。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在 Vue 组件中处理分页逻辑。…

vue如何实现两栏布局

vue如何实现两栏布局

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

h5如何实现定位

h5如何实现定位

使用HTML5 Geolocation API HTML5提供了Geolocation API,可以获取用户的地理位置信息。通过navigator.geolocation对象实现,支持获取经纬度、海拔…

vue如何实现登录

vue如何实现登录

Vue 实现登录功能的方法 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,通常命名为 Login.vue。表单包含用户名和密码输入框,以及提交按钮。 <template>…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

如何实现翻页式h5

如何实现翻页式h5

翻页式H5的实现方法 翻页式H5通常指通过滑动或点击切换页面的交互形式,常用于营销活动、产品展示等场景。以下是几种常见的实现方式: 使用HTML5和CSS3实现基础翻页 通过CSS3的transfo…