阅读Vue文档知道可以自定义插件和指令后便跃跃欲试,但一直没有尝试。最近项目进度压力不大,便尝试着使用Vue自定义插件和指令将项目权限校验部分进行了重构。

       首先是包装用户权限检测的功能。思路非常简单,就是在用户的权限数据中进行检测指定的角色或权限,检测到了则说明有权限,否则说明没有权限。用户的权限数据由RolePermission数组组成,在权限机制初始化的时候提供,也可以提供返回它们的函数。初始化如下:

 1Vue.use(Authorization, {
 2  authorization (context) {
 3    let roles = []
 4    let permissions = []
 5    ......
 6    return {roles, permissions}
 7  },
 8  options: {
 9    context: ......
10  }
11})
12

       其次是实现自定义的指令auth,使用后如果有权限则渲染后出指令所在的元素,否则忽略掉指令所在元素。

 1    Vue.directive('auth', {
 2      bind: function (el, binding) {
 3        let checkFunction = _authorization.hasPermission
 4        if (binding.arg === 'role') {
 5            checkFunction = _authorization.hasRole
 6        }
 7        if (!binding.arg && binding.arg !== '' && binding.arg !== 'permission') {
 8          throw new Error('指令参数错误')
 9        }
10        if (!checkFunction(binding.value)) {
11          el.parentNode.removeChild(el)
12        }
13      }
14    })
15

       使用方式如下:

 1    <div v-auth:role="aRole"> 
 2        ......
 3    </div>
 4
 5    <!--或-->
 6    <div v-auth:permission="aPermission"> 
 7        ......
 8    </div>
 9
10    <!--或-->
11    <div v-auth="aPermission"> 
12        ......
13    </div>