美文网首页
关于v-action

关于v-action

作者: 夜舞暗澜_3ea2 | 来源:发表于2020-06-09 18:21 被阅读0次

一、看代码

"v-action"指令的引入部分在框架src/core/directives/action.js文件中。

const action = Vue.directive('action', {
  inserted: function (el, binding, vnode) {
    const actionName = binding.arg // action权限名称
    const roles = store.getters.roles // 当前角色配置
    const elVal = vnode.context.$route.meta.permission // 当前路由的permission配置
//主操作:
    const permissionId = elVal instanceof String && [elVal] || elVal
// 遍历当前用户的permission配置。
    roles.permissions.forEach(p => {
// 如果用户没有当前路由权限,直接跳出。
      if (!permissionId.includes(p.permissionId)) {
        return
      }
// 继续比对用户当前路由权限,如果不存在action权限,则尝试移除或隐藏目标元素。
      if (p.actionList && !p.actionList.includes(actionName)) {
        el.parentNode && el.parentNode.removeChild(el) || (el.style.display = 'none')
      }
    })
  }
})  

二、做修正

看过引入后,可以很简单的注意到我们要加入action的两处位置:roles. permissions[permissionId].actionList$route.meta.permission

1. 角色权限

所有必需的角色配置参数是这样的:

store.getter.user => {
  describe: "拥有所有权限",
  id: "admin",
  name: "管理员",
  permissions: [{
    permissionId: "launch",
    permissionName: "投放管理",
    actionEntitySet: [{
      action: "add", // 我想添加的权限
      defaultCheck: false,
      describe: "添加"
    }],
    // actionList 是在src/store/modules/user.js/GetInfo中通过遍历actionEntitySet生成的。
  }],
  // permissionList 是在src/store/modules/user.js/GetInfo中通过遍历permissions生成的。
}

2. 路由权限:

路由权限部分:

 {
        path: '/**********',
        component: PageView,
        redirect: '/**********',
        meta: {
          title: '****管理',
          icon: 'cluster',
          permission: ['launch'] // 坑1:这里的权限设置无法控制v-action
        },
        children: [{
            path: '/**********/:id([1-9]\\d*)?',
            name: '**********',
            component: () => import('@/views/**********'),
            hidden: true,
            meta: {
                title: '**********详情',
                permission: ['launch'] // 坑1:必须在页面路由中重复写入权限才管用
            }
        }]
}

3. 坑:

  1. 坑1:
    如果使用v-action的页面路由是默认使用父级路由权限的话,action.js那边的逻辑是查不到的,必须要在使用v-action的页面本身meta中写入permission变量才能找得到。
  2. 坑2:
    如果对应的路由权限下没有actionList,原代码会直接放过去(即视为拥有action权限)。所以对此需要稍作修改:


    image.png

备用方案$auth

实际使用时,也可以选择v-if="$auth('actionName')"的方式。
例如我上文提到的权限,写法就是$auth('launch.add')

据作者的描述,v-action只是一个方便大家使用的小功能,实际上权限控制问题是并不是框架应该处理的问题。所以如果有更细致的权限控制需求,还是要自己努力想办法啊。

相关文章

  • 关于v-action

    一、看代码 "v-action"指令的引入部分在框架src/core/directives/action.js文件...

  • 关于关于关于

    他们爱他们自己,不爱你 他们爱你是他们的母亲妻子女儿姐妹 他们不爱你 直到你死的时候,爱才产生,与遗忘同时 那也不...

  • 光明人生

    关于出生 关于成长 关于求学 关于青春期 关于恋爱 关于择业 关于婚姻 关于养生 关于家庭 关于人际 关于教子 关...

  • 「梦雅的简动力」打卡计时65天

    * 关于人生 * 关于梦想 * 关于方向 * 关于创业 * 关于投资 * 关于成败 * 关于个性 * 关于高度 *...

  • 关于

    关于两个人? 关于100步? 关于回头? 关于深情? 关于家庭? 关于孩子? 关于成长? 关于伤痛? 关于怀抱? ...

  • 2017新手妈妈年终总结

    关于购物 关于体重 关于减肥 关于纪念日 关于生活态度 关于上班 关于职场晋升加薪 关于睡眠 关于抱孩子 关于发型...

  • 2018-11-28

    关于流浪、关于随心、关于自由、关于世俗、关于规则、关于坦诚、关于真我、关于好奇心、关于对这整个世界的态度、关于整个...

  • 一首歌的时间

    认真的 想理出点思绪 关于今天关于明天 关于工作关于梦想 关于冬天关于夜晚 关于阳光关于浪花 关于木马关于窗花 关...

  • 最近的各种关于

    关于运动,关于中文阅读,关于英文听力,关于口算。 关于专注,关于目标,关于举家迁移。 关于对正确的过于执着,关于对...

  • 『关于』

    关于雨落,关于天晴; 关于入夜,关于天明; 关于齐眉,关于耳鬓; 关于缘定,关于今生。 (早安~诸君!)

网友评论

      本文标题:关于v-action

      本文链接:https://www.haomeiwen.com/subject/uhvstktx.html