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的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spa首屏加载慢怎样解决

SPA&#xff08;Single Page Application&#xff0c;单页应用&#xff09;首屏加载慢是一个常见问题&#xff0c;主要原因通常是首次加载需要拉取体积较大的 JavaScript 文件、样式表、初始化数据等。以下是一些常见的 优化策略&#xff0c;可以帮助你 提升首屏加载速度&#…

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…

NTT印地赛车:数字孪生技术重构赛事体验范式,驱动观众参与度革命

引言&#xff1a;数字孪生技术赋能体育赛事&#xff0c;开启沉浸式观赛新纪元 在传统体育赛事观赛模式遭遇体验天花板之际&#xff0c;NTT与印地赛车系列赛&#xff08;NTT INDYCAR SERIES&#xff09;的深度合作&#xff0c;通过数字孪生&#xff08;Digital Twin&#xff09…

解构与重构:PLM 系统如何从管理工具进化为创新操作系统?

在智能汽车、工业物联网等新兴领域的冲击下&#xff0c;传统产品生命周期管理&#xff08;PLM&#xff09;系统正在经历前所未有的范式转换。当某头部车企因 ECU 软件与硬件模具版本失配导致 10 万辆智能电车召回&#xff0c;损失高达 6 亿美元时&#xff0c;这场危机不仅暴露了…

【Ubuntu 16.04 (Xenial)​​】安装docker及容器详细教程

Ubuntu 16.04 安装docker详细教程 一、docker安装1.1 前期准备1.2 使用 Docker 官方安装脚本安装&#xff08;推荐&#xff09; 查看ubuntu版本&#xff1a;lsb_release -a 这里我的系统是 ​​Ubuntu 16.04 (Xenial)​​&#xff0c;在 ​​Ubuntu 16.04 (Xenial)​​ 上安装…

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…

MySQL:InnoDB架构(内存架构篇)

目录 0.前置知识 0.1二级索引的概念 二级索引查询原理 1.整体架构 1.1为什么innoDB的架构会分为两个部分? 2.内存架构 2.1BufferPool 2.2ChangeBuffer 唯一性检查不是实时性会出现的问题? ChangeBuffer的优势 2.3Adaptive Hash Index 2.4LogBuffer 0.前置知识 0.…

鹰盾加密器“一机一码”技术全维度剖析:从底层实现到生态防护体系

“一机一码”加密技术的深度解析与实现路径 引言 在数字内容版权保护和软件授权管理领域&#xff0c;“一机一码”技术作为一种重要的安全防护手段&#xff0c;能够有效防止授权码滥用和非法传播。它通过建立设备与授权码的唯一对应关系&#xff0c;确保每份授权仅在特定设备…

Android 中使用 OkHttp 创建多个 Client

在 Android 开发中&#xff0c;有时我们需要创建多个 OkHttpClient 实例来满足不同的网络请求需求。以下是创建和管理多个 OkHttpClient 的方法&#xff1a; 基本创建方式 // 创建默认的 OkHttpClient val defaultClient OkHttpClient()// 创建带有自定义配置的 Client val …

C++中的跳转语句

C中的跳转语句包括break、continue和goto&#xff0c;它们用于改变程序的正常执行流程。下面分别介绍它们的作用、使用场景和注意事项&#xff1a; 1. break 作用&#xff1a; • 立即终止当前所在的循环&#xff08;for、while、do while&#xff09;或switch语句&#xff…

AI在网络安全领域的应用现状和实践

当前&#xff0c;人工智能技术已深度融入网络安全产品&#xff0c;推动传统防御模式向智能化、自适应方向加速演进。各安全厂商通过机器学习、深度学习与知识图谱等技术的融合应用&#xff0c;提高安全产品在威胁检测、攻击溯源、风险评估等场景的能力跃迁&#xff0c;突破传统…

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…

Spark 之 DataFrame 开发

foreachPartition val data = spark.sparkContext.parallelize(1 to 100)// 使用 foreachPartition 批量处理分区 data.foreachPartition {partitionIterator =

UDP:简洁高效的报文结构解析与关键注意事项

UDP&#xff08;User Datagram Protocol&#xff09;以其无连接、低开销的特性&#xff0c;成为实时应用&#xff08;如视频、游戏、DNS&#xff09;的首选传输协议。深入理解其报文结构和注意事项&#xff0c;是高效利用UDP的基础。 一、UDP报文结构&#xff1a;简洁的四段式 …

Cursor 工具项目构建指南:让 AI 审查 AI 生产的内容,确保生产的内容质量和提前发现问题

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 Cursor 工具项目构建指南:让 AI 审查 AI 生产的内容,确保生产的内容质量和提前发现问…

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…

企业中使用 MCP Server 实现业务打通

一、MCP 协议深度剖析 (一)技术架构解析 核心价值 MCP(Model Context Protocol)协议的核心价值在于解决 Function Call 的碎片化问题,提供标准化工具连接协议。它通过统一的上下文管理,使大语言模型(LLM)能够高效地访问外部资源、执行复杂任务,并实现与外部系统的动…

自己编写一个神经网络模型识别数字验证码(卷积神经网络的 Hello world)

开篇之前说明一下&#xff1a;本文纯粹是技术交流和探讨&#xff0c;所用数据为非公开数据集&#xff0c;仅限于学习&#xff0c;不可用以商业和其他用途。 一、项目目标 通过构建一个简单的 CNN 神经网络&#xff0c;实现对 数字验证码&#xff08;如 “7384”&#xff09; 的…

常用ADB命令

ADB&#xff1a;Android Debug Bridge&#xff0c;Android 调试桥。 是一个命令行工具&#xff0c;主要用于在开发过程中实现计算机与Android设备之间的通信。 ADB工具允许开发者执行一系列调试操作&#xff0c;如安装应用、管理应用的生命周期、读取日志数据、执行shell命令等…