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

vue3 按钮级别权限控制

在Vue 3中实现按钮级别的权限控制,可以通过多种方式实现。这里我将介绍几种常见的方法:

方法1:使用Vue 3的Composition API

在Vue 3中,你可以使用Composition API来创建一个可复用的逻辑来处理权限控制。

  1. 创建权限控制逻辑

首先,你可以创建一个usePermission.js文件,用于封装权限控制的逻辑。  

// src/composables/usePermission.js
import { ref, computed } from 'vue';export function usePermission(userRoles) {const permissions = ref(['admin', 'editor', 'viewer']); // 假设的权限列表const hasPermission = computed(() => {return permissions.value.includes(userRoles);});return { hasPermission };
}

 2.在组件中使用

然后,在需要控制权限的组件中引入并使用这个逻辑。

<template><button v-if="hasPermission" @click="handleClick">编辑</button>
</template><script setup>
import { usePermission } from '@/composables/usePermission';
import { ref } from 'vue';const userRole = ref('editor'); // 当前用户的角色
const { hasPermission } = usePermission(userRole);function handleClick() {console.log('Clicked');
}
</script>

方法2:使用Vue 3的Provide/Inject API

如果你想要在整个应用中共享用户角色信息,可以使用provide/inject。

  1. 在根组件中提供用户角色

    <template><div><App /></div>
    </template><script setup>
    import { provide, ref } from 'vue';
    import App from './App.vue';const userRole = ref('editor'); // 当前用户的角色
    provide('userRole', userRole); // 提供用户角色信息
    </script>
  2. 在子组件中使用

<template><button v-if="hasPermission" @click="handleClick">编辑</button>
</template><script setup>
import { inject, computed } from 'vue';
import { usePermission } from '@/composables/usePermission'; // 复用之前的权限逻辑组件const userRole = inject('userRole'); // 注入用户角色信息
const { hasPermission } = usePermission(userRole); // 使用权限控制逻辑function handleClick() {console.log('Clicked');
}
</script>

方法3:使用Vue Router的元信息(Meta Fields)进行权限控制

如果你的应用是基于Vue Router的,你可以利用路由的元信息(meta fields)来控制访问。

  1. 定义路由并添加meta字段

import { createRouter, createWebHistory } from 'vue-router';
import Home from './views/Home.vue';
import Admin from './views/Admin.vue';
import Viewer from './views/Viewer.vue';
import { ref } from 'vue'; // 引入ref用于演示,实际应用中应从某处获取当前用户角色信息,如localStorage或Vuex等。const userRole = ref('editor'); // 当前用户的角色,实际应用中应从某处获取。例如:localStorage.getItem('userRole')或Vuex状态。
const routes = [{ path: '/', component: Home },{ path: '/admin', component: Admin, meta: { roles: ['admin'] } }, // 仅admin角色可以访问的路由。{ path: '/viewer', component: Viewer, meta: { roles: ['viewer', 'editor'] } } // viewer和editor角色都可以访问的路由。
];

     2.路由守卫进行权限检查

const router = createRouter({ history: createWebHistory(), routes });
router.beforeEach((to, from, next) => {if (to.meta.roles && !to.meta.roles.includes(userRole.value)) { // 检查用户角色是否符合路由所需的角色。实际应用中应从某处获取当前用户角色信息。例如:localStorage.getItem('userRole')或Vuex状态。 确保这里的角色匹配逻辑正确。例如,你可能需要从store中获取当前用户角色而非硬编码。这里仅为示例。 实际应用中应从store或全局状态管理获取当前用户角色。例如:store.state.auth.userRole 或 Vuex的

相关文章:

vue3 按钮级别权限控制

在Vue 3中实现按钮级别的权限控制&#xff0c;可以通过多种方式实现。这里我将介绍几种常见的方法&#xff1a; 方法1&#xff1a;使用Vue 3的Composition API 在Vue 3中&#xff0c;你可以使用Composition API来创建一个可复用的逻辑来处理权限控制。 创建权限控制逻辑 首…...

vue3子组件获取并修改父组件的值

在子组件中&#xff0c;父组件传递来的 prop 是只读的&#xff0c;但是确实有修改的需求&#xff0c;故此做个小小研究 // 父组件使用模版&#xff1a;update:xxx"dialogVisible $event" // 子组件使用模版 // const emits defineEmits([update:xxx]); // emits(u…...

【Redis】Cluster集群

目录 1、背景2、核心特性【1】数据分片【2】高可用【3】去中心化【4】客户端重定向 3、集群架构【1】最小规模【2】节点角色【3】通信协议 4、数据分片与路由【1】哈希槽分配【2】客户端路由逻辑 5、故障恢复6、适用场景 1、背景 Redis Cluster是Redis官方提供的分布式解决方案…...

黑马Java面试笔记之 微服务篇(SpringCloud)

一. SpringCloud 5大组件 SpringCloud 5大组件有哪些&#xff1f; 总结 五大件分别有&#xff1a; Eureka&#xff1a;注册中心Ribbon&#xff1a;负载均衡Feign&#xff1a;远程调用Hystrix&#xff1a;服务熔断Zuul/Gateway&#xff1a;网关 如果项目用到了阿里巴巴&#xff…...

CLIP多模态大模型的优势及其在边缘计算中的应用

CLIP多模态大模型的优势及其在边缘计算中的应用 CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09;模型&#xff0c;是OpenAI开发的一种多模态大模型。该模型通过对比学习的方式&#xff0c;在大规模图像-文本对上进行预训练&#xff0c;成功实现了图像和文…...

基于STM32语音识别柔光台灯

基于STM32语音识别柔光台灯 &#xff08;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 基于语音识别的智能LED柔光台灯设计&#xff0c;主要包括语音识别模块应用&#xff0c;PWM波控制LED柔光灯的亮度&#xff0c…...

基于PSO粒子群优化的VMD-GRU时间序列预测算法matlab仿真

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 6.1变分模态分解&#xff08;VMD&#xff09; 6.2 门控循环单元&#xff08;GRU&#xff09; 6.3 粒子群优化&#xff08;PSO&#xff09; 7.参考文献 8.算法完…...

探索未知惊喜,盲盒抽卡机小程序系统开发新启航

在消费市场不断追求新鲜感与惊喜体验的当下&#xff0c;盲盒抽卡机以其独特的魅力&#xff0c;迅速成为众多消费者热衷的娱乐与消费方式。我们紧跟这一潮流趋势&#xff0c;专注于盲盒抽卡机小程序系统的开发&#xff0c;致力于为商家和用户打造一个充满趣味与惊喜的数字化平台…...

基于开源AI大模型与AI智能名片的S2B2C商城小程序源码优化:企业成本管理与获客留存的新范式

摘要&#xff1a;本文以企业成本管理的两大核心——外部成本与内部成本为切入点&#xff0c;结合开源AI大模型、AI智能名片及S2B2C商城小程序源码技术&#xff0c;构建了企业数字化转型的“技术-成本-运营”三维模型。研究结果表明&#xff0c;通过AI智能名片实现获客留存效率提…...

Python----目标检测(YOLO简介)

一、 YOLO简介 [YOLO](You Only Look Once&#xff09;是一种流行的物体检测和图像分割模型&#xff0c; 由华盛顿大学的约瑟夫-雷德蒙&#xff08;Joseph Redmon&#xff09;和阿里-法哈迪&#xff08;Ali Farhadi&#xff09;开发&#xff0c;YOLO 于 2015 年推出&#xff0c…...

mysql+keepalived

文章目录 一、master1创建目录写入配置文件启动master1创建 `slave` 用户并授权获取主节点当前 `binary log` 文件名和位置position二、master2创建目录写入配置文件启动master2创建 `slave` 用户并授权获取主节点当前 `binary log` 文件名和位置position三、配置主主复制Maste…...

Profinet 协议 IO-Link 主站网关(三格电子)

一、产品概述 1.1 产品用途 SG-PN-IOL-8A-001 网关是 Profinet 从转 IO-Link 主的网关设备 &#xff0c;可以将 IO-Link 从站设备接入 Profinet 系统&#xff0c;通过该网关可实现传感器及驱动器与控制 器之间的信息交互。网关有两个百兆网口和 8 个 IO-Link 端口&#xff0c;两…...

Ubuntu22.04 安装 Miniconda3

Conda 是一个开源的包管理系统和环境管理系统&#xff0c;可用于 Python 环境管理。 Miniconda 是一个轻量级的 Conda 发行版。Miniconda 包含了 Conda、Python和一些基本包&#xff0c;是 Anaconda 的精简版本。 1.下载安装脚本 在 conda官网 找到需要的安装版本&#xff0…...

Hubstudio浏览器如何使用Loongproxy?

1. 使用软件 1.1 Loongproxy 1. 顶级ISP资源&#xff1a;Loongproxy是神龙云旗下品牌&#xff0c;依托与全球领先ISP运营商的深度合作&#xff0c;Loongproxy 精选全球优质静态住宅IP资源。 2. IP池庞大&#xff1a;覆盖 100 国家/地区&#xff0c;构建庞大的 70 万 静态IP池…...

硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总

目录 一 555定时器基础知识 二、引脚功能 三、工作模式 1. 单稳态模式: 2. 双稳态模式(需要外部电路辅助): 3. 无稳态模式(多谐振荡器): 4. 可控脉冲宽度调制(PWM)模式: 四、典型应用 五、优点 二 555无稳态触发器 三 555单稳态触发器 四 555双稳态触发器…...

ComfyUI 对图片进行放大的不同方法

本篇里 ComfyUI Wiki将讲解 ComfyUI 中几种基础的放大图片的办法,我们时常会因为设备性能问题,不能一次性生成大尺寸的图片,通常会先生成小尺寸的图像然后再进行放大。 不同的放大图片方法有不同的特点,以下是本篇教程将会涉及的方法: 像素重新采样SD 二次采样放大使用放…...

Elasticsearch最新入门教程

文章目录 Elasticsearch最新入门教程1.Elasticsearch安装2.Kibana安装3.Elasticsearch关键概念4.SpringBoot整合Elasticsearch4.1 导入Elasticsearch数据4.2 创建SpringBoot项目4.3 修改pom.xml文件4.4 创建es实体类4.5 创建es的查询接口 5.DSL语句5.1 无条件查询5.2 指定返回的…...

第16节 Node.js 文件系统

Node.js 提供一组类似 UNIX&#xff08;POSIX&#xff09;标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示&#xff1a; var fs require("fs") 异步和同步 Node.js 文件系统&#xff08;fs 模块&#xff09;模块中的方法均有异步和同步版本&#xff…...

【Linux网络篇】:从HTTP到HTTPS协议---加密原理升级与安全机制的全面解析

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;Linux篇–CSDN博客 文章目录 HTTPS协议原理一.预备知识1.什么是“加密”2.为什么要“加密”…...

jenkins结合gitlab实现CI

Jenkins结合GitLab实现CI&#xff08;持续集成&#xff09; 持续集成&#xff08;Continuous Integration, CI&#xff09;是一种软件开发实践&#xff0c;开发者在代码提交后&#xff0c;系统会自动进行构建、测试&#xff0c;从而尽早发现问题。Jenkins和GitLab的结合可以高效…...

SQL进阶之旅 Day 17:大数据量查询优化策略

文章标题 【SQL进阶之旅 Day 17】大数据量查询优化策略 文章内容 开篇 欢迎来到"SQL进阶之旅"系列的第17天&#xff01;在前面的16天中&#xff0c;我们从基础的表设计、索引应用到复杂的窗口函数和高级索引策略&#xff0c;逐步深入探讨了SQL的核心技术。今天我们…...

字符串 金额转换

package heima.Test09;import java.util.Scanner;public class Money {public static void main(String[] args) {//1。键盘录入一个金额Scanner sc new Scanner(System.in);//请输入一个数据String result "";int money;while (true) {System.out.println("请…...

浅聊一下,大模型应用架构 | 工程研发的算法修养系列(二)

大模型应用架构基础 AI应用演进概述 人工智能应用的发展经历了多个关键阶段&#xff0c;每个阶段都代表着技术范式的重大转变。 大语言模型基础 大语言模型(LLM)作为现代AI应用的核心组件&#xff0c;具有独特的技术特性和能力边界&#xff0c;理解这些基础对架构设计至关重要。…...

装载机防撞系统:智能守护,筑牢作业现场人员安全防线

在尘土飞扬、机械轰鸣的建筑工地上&#xff0c;装载机是不可或缺的 “大力士”&#xff0c;承担着土方搬运、物料装卸等繁重任务。然而&#xff0c;传统作业模式下&#xff0c;装载机的安全隐患时刻威胁着现场人员的生命安全与工程进度。随着智能化技术的突破&#xff0c;唯创安…...

上门服务小程序订单系统框架设计

一、逻辑分析 上门服务小程序订单系统主要涉及服务展示、用户下单、订单处理、服务人员接单与服务完成反馈等核心流程。 服务展示&#xff1a;不同类型的上门服务&#xff08;如家政、维修等&#xff09;需要在小程序中展示详细信息&#xff0c;包括服务名称、价格、服务内容介…...

11.MySQL事务管理详解

MySQL事务管理详解 文章目录 MySQL事务管理 事务的概念 事务的版本支持 事务的提交方式 事务的相关演示 事务的隔离级别 查看与设置隔离级别 读未提交&#xff08;Read Uncommitted&#xff09; 读提交&#xff08;Read Committed&#xff09; 可重复读&#xff08;Repeatabl…...

前端实现视频/直播预览

有一个需求&#xff1a;后端返回视频的预览地址&#xff0c;不仅要支持这个视频的预览&#xff0c;还需要设置视频封面。 这里有两种情况&#xff1a; 如果是类似.mp4&#xff0c;.mov等格式的视频可以选用原生 video 进行视频展示&#xff0c;并且原生的 video 也支持全屏、…...

React源码阅读-fiber核心构建原理

React源码阅读(2)-fiber核心构建原理 好的&#xff0c;我明白了。您提供的文本主要介绍了 React 源码中 Fiber 核心的构建原理&#xff0c;涵盖了从执行上下文到构建、提交、调度等关键阶段&#xff0c;以及相关的代码实现。 您提出的关联问题也很重要&#xff0c;它们深入探讨…...

视频监控管理平台EasyCVR与V4分析网关对接后告警照片的清理优化方案

一、问题概述​ 在安防监控、设备运维等场景中&#xff0c;用户将视频监控管理平台EasyCVR与V4网关通过http推送方式协同工作时&#xff0c;硬件盒子上传的告警图片持续累积&#xff0c;导致EasyCVR服务器存储空间耗尽&#xff0c;影响系统正常运行与告警功能使用。 二、解决方…...

基于 BGE 模型与 Flask 的智能问答系统开发实践

基于 BGE 模型与 Flask 的智能问答系统开发实践 一、前言 在人工智能快速发展的今天&#xff0c;智能问答系统成为了提升信息检索效率和用户体验的重要工具。本文将详细介绍如何利用 BGE&#xff08;Base General Embedding&#xff09;模型、Faiss 向量检索库以及 Flask 框架…...