当前位置: 首页 > news >正文

vue3按钮级别权限处理,自定义指令

hasPermi.ts,具体逻辑根据各自的项目自行设计

import router from '@/router';
import { usePermissionStore } from '@/store';

export default {
	// mounted是指令的一个生命周期
	mounted(el, binding) {
		// value 获取用户使用自定义指令绑定的内容
		const { value } = binding;

		// 判断用户使用自定义指令,是否使用正确了
		if (value && value instanceof Array && value.length > 0) {
			let hasPermission = false;
			const permissionStore = usePermissionStore();
			const pagesRoutesMap = permissionStore.pagesRoutesMap;

			if (pagesRoutesMap.size === 0) {
				hasPermission = false;
			} else {
				// 拿到路由的目的是为了解决多个菜单复用同一个组件,然后组件的同一个按钮不同菜单显示不同的权限的问题
				const routePath = (router.currentRoute as any)._value.path || '';
				const target: any = pagesRoutesMap.get(routePath);
				if (!target) {
					hasPermission = false;
				} else {
					const permissions = target.buttonPermissionList || [];
					hasPermission = permissions.some((permission) => {
						return value.includes(permission);
					});
				}
			}
			// 当用户没有这个按钮权限时,设置隐藏这个按钮
			if (!hasPermission) {
				el.parentNode && el.parentNode.removeChild(el);
			}
		} else {
			throw new Error('v-hasPermi value must be an array');
		}
	},
};

index.ts

import hasPermi from './hasPermi';

export default function directive(app) {
	app.directive('hasPermi', hasPermi);
}

在main.ts中引入

import directive from '@/directive'; // 自定义指令

directive(app);

使用

v-hasPermi="['system:user:add', 'system:user:delete']"
http://www.dtcms.com/a/34850.html

相关文章:

  • redis主从哨兵模式+Lua报错-READONLY You can‘t write against a read
  • Java之异常体系
  • Java Set实现类面试题
  • IP----访问服务器流程
  • 解密 Token:大模型如何解析中英文文本
  • 基于 Python 和 Django 的文本情感分析系统设计与实现
  • 音视频容器格式
  • 智能证件照处理器(深度学习)
  • IRI 2016 模型在线版 MATLAB
  • JMeter
  • Java IO 流:从入门到实践
  • 基于javaweb的SpringBoot社区维修平台设计和实现(源码+文档+部署讲解)
  • 如何用Python开发一款可以标注课标单词的工具
  • 【Windows 同时安装 MySQL5 和 MySQL8 - 详细图文教程】
  • 全面汇总windows进程通信(二)
  • 【DeepSeek与鸿蒙HarmonyOS:开启应用开发新次元】
  • 机械行业金属材料重量计算器
  • CSS实现一张简易的贺卡
  • MySQL基本查询——表的增删查改
  • python-leetcode-N 皇后
  • 【Python爬虫(61)】Python金融数据挖掘之旅:从爬取到预测
  • Python Pandas库使用指南:从入门到精通
  • DeepSeek配合集成平台实现跨境系统的对接
  • GEE中的Map对象
  • Visual Studio打开文件后,中文变乱码的解决方案
  • Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法
  • gihub上适合练手的go项目
  • 网络安全蜜罐产品研究现状
  • 微信小程序调用火山方舟(字节跳动火山引擎)中的DeepSeek大模型
  • 单片机裸机编程-时机管理