vue的权限管理应该怎么做?路由级和按钮级分别怎么处理

246 阅读1分钟

Vue的权限管理可以通过路由级和按钮级来处理。

  1. 路由级权限管理

路由级权限管理是指根据用户的角色或权限,动态生成路由表,只有具有相应角色或权限的用户才能访问对应的页面。可以使用Vue Router提供的导航守卫来实现路由级权限管理。

例如,在路由配置中添加一个meta字段,用于存储该路由需要的角色或权限信息:

const routes = [
  {
    path: '/dashboard',
    component: Dashboard,
    meta: { requiresAuth: true, roles: ['admin', 'editor'] }
  },
  {
    path: '/profile',
    component: Profile,
    meta: { requiresAuth: true, roles: ['admin'] }
  },
  {
    path: '/login',
    component: Login
  }
]

然后在导航守卫中判断用户是否具有访问该页面所需的角色或权限:

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

  next()
})
  1. 按钮级权限管理

按钮级权限管理是指根据用户的角色或权限,动态控制页面上某些按钮是否可见或可操作。可以使用Vue指令来实现按钮级权限管理。

例如,在模板中添加一个v-permission指令,用于控制按钮是否可见或可操作:

<button v-permission="'edit'">Edit</button>

然后在自定义指令中判断用户是否具有操作该按钮所需的角色或权限:

Vue.directive('permission', {
  inserted(el, binding) {
    const userRoles = store.getters.userRoles
    const requiredRoles = binding.value
    
    if (!userRoles.some(role => requiredRoles.includes(role))) {
      el.parentNode.removeChild(el)
    }
  }
})