VUE封装-自定义权限控制指令

        在实际开发中,会遇到很多的权限控制、资源位的场景,其实就是用来控制某个组件的展示与否,可以是一个按钮、一个报表、一个TAB页面等

例如下图,我想通过当前登录的用户控制谷歌的这个logo显示与否

        因为设计到的权限、资源位控制比较多,如果单纯的使用v-if 进行组件的展示与否的判断,会导致在每个页面都需要重新写,重新从vuex或者pinia或者发起请求获取资源为列表,再通过当前用户判断是否有权限。

这就导致了两个问题:

        1)代码冗余,难于维护

        2)v-if中条件过多容易逻辑混乱

        所以我们就可以通过自定义的指令进行控制,所谓自定义指令,其实就是写一个类似v-if的属性,通过我们自定义的逻辑判断达到组件展示与否的功能

首先再src下新建名为directive的文件夹,新建如下两个js文件

permission.js文件:

import {useSubscriber} from "@/store/index.js";

/**
 * 权限控制指令
 */
export default {
  mounted(el,binding){
    // 首先判断是否使用自定义指令 若不使用(无值)则不进行校验
    if(binding.value){
      // 获取pinia中的用户信息
      const subscriber = useSubscriber()
      // 从用户信息中获取其包含的权限列表
      const perms = subscriber.perms
      // 判断权限列表中是否包含自定义指令输入的值
      const flag = binding.value.some((item) => {
         return perms.indexOf(item) > -1
      })
      // 如果不包含的话 则代表无权限,则删除该节点
      if(!flag){
          el.parentNode && el.parentNode.removeChild(el)
      }
    }
  }
}

index.js文件:

import permission from "./permission"
const directives = {
  permission
}
// 注册指令
export default {
  install(Vue){
    Object.keys(directives).forEach(key=>{
        Vue.directive(key,directives[key])
    })
  }
}

然后我们再main.js中增加

import directive from "./directive/index.js";


app.use(router)
        .use(store)
        // 挂到app上
        .use(directive)
        .use(components).mount('#app')

然后就可以需要使用的页面上通过v-permission="['']"使用了

我在网上看到些方法,里面写的是将该节点的display属性置为none,但是这样的话就会导致更改页面源码,将该组件再展示出来,所以建议还是直接删除节点。

相关推荐

  1. Vue3定义指令与Composition API实现动态权限控制

    2024-06-09 12:08:05       40 阅读
  2. vue定义指令配置小程序按钮权限

    2024-06-09 12:08:05       37 阅读
  3. Vue3图片懒加载封装定义指令

    2024-06-09 12:08:05       11 阅读
  4. Android权限控制---定义权限

    2024-06-09 12:08:05       42 阅读
  5. Vue定义指令

    2024-06-09 12:08:05       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 12:08:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 12:08:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 12:08:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 12:08:05       20 阅读

热门阅读

  1. 【手撕面试题】Vue(高频知识点四)

    2024-06-09 12:08:05       7 阅读
  2. 17、关于加强数据资产管理的指导意见

    2024-06-09 12:08:05       10 阅读
  3. Synchronized的锁膨胀艺术:深入源码的探险之旅

    2024-06-09 12:08:05       8 阅读
  4. 汽车soa架构介绍

    2024-06-09 12:08:05       8 阅读
  5. nginx配置文件

    2024-06-09 12:08:05       10 阅读
  6. ASP.NET的WebService跨域CORS问题解决方案

    2024-06-09 12:08:05       9 阅读
  7. Python3 笔记:字符串的 startswith() 和 endswith()

    2024-06-09 12:08:05       9 阅读
  8. 数据库与低代码开发:技术革新与应用实践

    2024-06-09 12:08:05       10 阅读
  9. 数据仓库中常用的元数据管理系统

    2024-06-09 12:08:05       8 阅读
  10. LeetCode 9 - 回文数

    2024-06-09 12:08:05       9 阅读