当前位置:首页 > VUE

vue操作权限管理实现

2026-02-24 07:17:18VUE

Vue 权限管理实现方法

基于路由的权限控制

在 Vue 项目中,可以通过路由守卫来实现权限控制。在路由配置中为每个路由添加 meta 字段,定义需要的权限。

const routes = [
  {
    path: '/admin',
    component: AdminPage,
    meta: { requiresAuth: true, roles: ['admin'] }
  },
  {
    path: '/user',
    component: UserPage,
    meta: { requiresAuth: true, roles: ['user', 'admin'] }
  }
]

在全局前置守卫中检查用户权限:

router.beforeEach((to, from, next) => {
  const userRole = store.getters.userRole
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!userRole) {
      next('/login')
    } else if (to.matched.some(record => record.meta.roles.includes(userRole))) {
      next()
    } else {
      next('/403')
    }
  } else {
    next()
  }
})

基于指令的权限控制

创建自定义指令来控制元素的显示:

Vue.directive('permission', {
  inserted: function(el, binding, vnode) {
    const userRoles = vnode.context.$store.getters.userRoles
    if (!userRoles.includes(binding.value)) {
      el.parentNode.removeChild(el)
    }
  }
})

在模板中使用:

<button v-permission="'admin'">管理员按钮</button>

基于组件的权限控制

创建权限组件封装权限逻辑:

vue操作权限管理实现

const Permission = {
  functional: true,
  render: function(createElement, context) {
    const userRoles = context.parent.$store.getters.userRoles
    const requiredRoles = context.props.roles
    if (requiredRoles.some(role => userRoles.includes(role))) {
      return context.slots().default
    }
    return null
  }
}

注册并使用:

Vue.component('Permission', Permission)
<permission :roles="['admin']">
  <button>管理员专属按钮</button>
</permission>

动态菜单生成

根据用户权限动态生成菜单:

computed: {
  filteredRoutes() {
    return this.$router.options.routes.filter(route => {
      return !route.meta || 
             !route.meta.roles || 
             route.meta.roles.includes(this.$store.getters.userRole)
    })
  }
}

在模板中渲染过滤后的路由:

vue操作权限管理实现

<nav>
  <router-link 
    v-for="route in filteredRoutes" 
    :key="route.path" 
    :to="route.path"
  >
    {{ route.name }}
  </router-link>
</nav>

API 请求权限控制

在请求拦截器中添加权限验证:

axios.interceptors.request.use(config => {
  const token = store.getters.token
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, error => {
  return Promise.reject(error)
})

axios.interceptors.response.use(response => {
  return response
}, error => {
  if (error.response.status === 401) {
    store.dispatch('logout')
    router.push('/login')
  }
  return Promise.reject(error)
})

状态管理集成

在 Vuex 中管理权限状态:

const store = new Vuex.Store({
  state: {
    user: null,
    roles: []
  },
  mutations: {
    setUser(state, { user, roles }) {
      state.user = user
      state.roles = roles
    },
    clearUser(state) {
      state.user = null
      state.roles = []
    }
  },
  actions: {
    login({ commit }, credentials) {
      return api.login(credentials).then(response => {
        commit('setUser', {
          user: response.data.user,
          roles: response.data.roles
        })
      })
    },
    logout({ commit }) {
      commit('clearUser')
    }
  },
  getters: {
    hasRole: state => role => {
      return state.roles.includes(role)
    }
  }
})

按钮级别权限控制

创建权限混入:

export default {
  methods: {
    $can(permission) {
      return this.$store.getters.userPermissions.includes(permission)
    }
  }
}

在组件中使用:

import permissionMixin from './permissionMixin'

export default {
  mixins: [permissionMixin],
  methods: {
    deleteItem() {
      if (this.$can('delete')) {
        // 执行删除操作
      }
    }
  }
}

标签: 权限操作
分享给朋友:

相关文章

权限管理vue如何实现

权限管理vue如何实现

权限管理在 Vue 中的实现方法 基于路由的权限控制 通过 Vue Router 的全局前置守卫 beforeEach 实现路由拦截,结合用户角色或权限列表动态过滤可访问路由。示例代码: rou…

vue前端实现权限

vue前端实现权限

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

vue实现前端权限

vue实现前端权限

Vue 前端权限实现方案 前端权限控制的核心在于根据用户角色或权限动态控制页面访问、菜单展示和操作按钮。以下是几种常见的实现方式: 基于路由的权限控制 通过路由守卫拦截未授权访问,动态生成可访问路由…

vue 实现权限管理

vue 实现权限管理

Vue 权限管理实现方案 权限管理通常分为路由权限和功能权限两部分,以下是具体实现方式: 路由权限控制 动态路由方案 用户登录后获取权限列表,过滤出有权限的路由 使用router.addRoute…

vue按钮权限实现

vue按钮权限实现

实现按钮权限的常见方法 在Vue项目中实现按钮权限控制,通常有以下几种方案: 基于v-directive的自定义指令 创建自定义指令v-permission,在指令中判断用户权限并控制DOM显示隐…

vue的权限控制实现

vue的权限控制实现

Vue 权限控制实现方法 路由级权限控制 通过路由守卫(beforeEach)实现动态路由过滤,结合用户角色控制可访问路由表。典型代码如下: // router.js router.beforeE…