# 权限验证

Vue 前端项目的权限验证

Vue 前端项目权限的实现方式是:通过获取当前用户的权限去比对路由表,生成当前用户具有权限的可访问路由表,通过 router.addRoutes 动态挂载到 router 上。

const map= {
 login: require('login/index').default // 同步的方式
 login: ()=>import('login/index')      // 异步的方式
}
// 存在服务端的 map 类似于
const serviceMap = [
 { path: '/login', component: 'login', hidden: true }
]
//遍历这个 map,动态生成 asyncRoutes。将 component 替换为 map[component]

# 逻辑修改

路由层面权限的控制代码都在 src/permission.js 中,如果想修改逻辑,直接在适当的判断逻辑中 next() 释放钩子即可。

# 指令权限

封装了一个指令权限,能简单快速地实现按钮级别的权限判断,代码在 src/directive/permission。

使用

<template>
  <!-- Admin can see this -->
  <el-tag v-permission="['ROLE_ADMIN']">admin</el-tag>
  <!-- Editor can see this -->
  <el-tag v-permission="['ROLE_EDITOR']">editor</el-tag>
  <!-- Editor can see this -->
  <el-tag v-permission="['ROLE_ADMIN','ROLE_EDITOR']">Both admin or editor can see this</el-tag>
</template>

<script>
// 也可以为了方便使用,将它注册到全局
import permission from '@/directive/permission/index.js' // 权限判断指令
export default {
  directives: { permission }
}
</script>

可以使用全局权限判断函数,用法和指令跟 v-permission 类似。

<template>
  <el-tab-pane v-if="checkPermission(['ROLE_ADMIN'])" label="Admin">Admin can see this</el-tab-pane>
  <el-tab-pane v-if="checkPermission(['ROLE_EDITOR'])" label="Editor">Editor can see this</el-tab-pane>
  <el-tab-pane v-if="checkPermission(['ROLE_ADMIN','ROLE_EDITOR'])" label="Admin-OR-Editor">Both admin or editor can see this</el-tab-pane>
</template>
<script>
import checkPermission from '@/utils/permission' // 权限判断函数
export default {
   methods: {
    checkPermission
   }
}
</script>