vue3自定义指令实现标签级权限控制

vue3使用自定义指令directive 实现标签级别权限控制

  1. 我们在用vue写偏后台的项目时长长会涉及到权限控制,如果你是自己搭建的项目而不是用成熟的模板的话,那一定绕不过去权限控制,话不多说,正片开始~~

  2. 新建逻辑处理文件 permission.js 放在哪看项目结构或者个人习惯,一般放根目录

  3. permission.js逻辑处理部分

export default function permission(app) {
  app.directive('permission', {
    mounted(el, binding) {
      if (!permsJudge(binding.value)) {
        el.parentNode.removeChild(el);
      }
      function permsJudge(value) {
        let perms = ['admin','游客'];
        if (value && value instanceof Array) {
          if (value.length > 0) {
            const permissionRoles = value;
            const hasPermission = perms.some((role) => {
              return permissionRoles.includes(role);
            });
            return hasPermission;
          }
        } else {
          throw new Error(`need roles Array! Like v-permission="['admin','editor']"`);
        }
      }
    },
  });
}

let perms = [‘admin’,‘游客’]; 此处替换为项目真实权限列表即可

代码解读:函数接受一个app参数 这个参数从全局main.js中传入(就是createApp实例) directive 新建指令需接受两个参数
1:不含’v-’ 开头的字符串,也就是指令名称。
2:一个对象
3:这个对象中的钩子函数mounted接受两个参数el和binding el:指令绑定到的元素。这可以用于直接操作 DOM,binding 是一个对象 其中value是我们需要的:传递给指令的值 ,加油很多属性可自行查阅
指令中的钩子函数还有好多个 可自行查阅官网vue自定义指令穿送门

最后就是平平无奇的js逻辑处理

在main.js中引入注册

import { createApp } from 'vue';

import App from './App.vue';

const app = createApp(App);

import permission from './permission.js';

permission(app);

app.mount('#app');

最后,在项目中任意一个.vue文件标签中即可使用

<div v-permission="['admin']">123</div>
//或者多个权限满足一个即可
<div v-permission="['admin','test']">456</div>

如果都不包含,即用户没有该权限,节点就会被删除

如此,标签级别的权限控制指令就封装完毕啦~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值