Vue中權限控制的方案

文章目錄

    • 源碼:
    • 一、頁面級
      • 1.1、路由守衛
      • 1.2、動態路由
    • 二、按鈕級別
      • 2.1、通過v-if來判斷
      • 2.2、通過組件包裹的方式來判斷
      • 2.3、通過自定義指令的方式
    • 三、接口級別

源碼:

https://gitee.com/liu-qiang-yyds/sysPermission

一、頁面級

1.1、路由守衛

	前端可以通過路由守衛來判斷用戶是否對某一個頁面有權限,從而阻止用戶進入頁面。

1.2、動態路由

	根據用戶的權限返回對應擁有權限的路由表,然后去循環注冊路由。

二、按鈕級別

2.1、通過v-if來判斷

通過最簡單的辦法v-if條件判斷

2.2、通過組件包裹的方式來判斷

包裹組件

<template><slot v-if="hasPermission"></slot>
</template><script setup>
import { ref, computed, onMounted, onUnmounted } from 'vue';
import eventBus from '../eventBus'; 
// 定義props
const props = defineProps({permission: {type: String,required: true,},
});
// 用戶權限列表
const userPermissions = ref(['sys:user:add','sys:user:edit','sys:user:del']);
// 監聽事件
const handleUserChanged = (permissions) => {userPermissions.value = permissions;// console.log(userPermissions.value);};
// 組件掛載時注冊事件監聽
onMounted(() => {eventBus.on('user-changed', handleUserChanged);
});// 組件卸載時移除事件監聽
onUnmounted(() => {eventBus.off('user-changed', handleUserChanged);
});
// 計算屬性:判斷是否有權限
const hasPermission = computed(() => userPermissions.value.includes(props.permission));</script>

使用

 	<Permission :permission="'sys:user:add'"><el-button type="primary">添加</el-button></Permission><Permission :permission="'sys:user:edit'"><el-button type="success">修改</el-button></Permission><Permission :permission="'sys:user:del'"><el-button type="danger">刪除</el-button></Permission>

2.3、通過自定義指令的方式

自定義組件

import { usePermissionStore } from '../store/permissionStore';
export default{created(el, binding, vnode, prevNode) {// 在綁定元素的attribute或事件監聽器被應用之前調用},mounted(el, binding, vnode, prevNode) {const permissionStore = usePermissionStore();const {permissions} = permissionStoreconsole.log(permissions,'123');// 在綁定元素的父組件被掛載后調用if(!permissions.includes(binding.value)){el.parentNode.removeChild(el);}},updated(el, binding, vnode, prevNode) {// 在包含組件的VNode及其子組件的VNode更新后調用}}

使用

<el-button v-auth="'sys:user:add'" type="primary">添加</el-button><el-button v-auth="'sys:user:edit'"  type="success">修改</el-button><el-button v-auth="'sys:user:del'"  type="danger">刪除</el-button>

三、接口級別

	后端可以寫一個接口白名單,白名單的接口對應著權限的級別,前端用戶的級別小于這個接口的級別,就通過中間件返回給前端一個權限不足的信息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76276.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76276.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【OSG學習筆記】Day 1: OSG初探——環境搭建與第一個3D窗口

什么是 OSG&#xff1f; 全稱&#xff1a;OpenSceneGraph&#xff08;開源場景圖&#xff09; 定位&#xff1a;一個基于 C/OpenGL 的高性能開源3D圖形開發工具包&#xff0c;專注于實時渲染和復雜場景管理。 核心思想&#xff1a;通過 場景圖&#xff08;Scene Graph&#xf…

Kubernetes 入門篇之網絡插件 calico 部署與安裝

在運行kubeadm init 和 join 命令部署好master和node節點后&#xff0c;kubectl get nodes 看到節點都是NotReady狀態&#xff0c;這是因為沒有安裝CNI網絡插件。 kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Not…

游戲開發中 C#、Python 和 C++ 的比較

&#x1f3ac; Verdure陌矣&#xff1a;個人主頁 &#x1f389; 個人專欄: 《C/C》 | 《轉載or娛樂》 &#x1f33e; 種完麥子往南走&#xff0c; 感謝您的點贊、關注、評論、收藏、是對我最大的認可和支持&#xff01;?? 摘要&#xff1a; 那么哪種編程語言最適合游戲開發…

LabVIEW真空度監測與控制系統

開發了一種基于LabVIEW的真空度信號采集與管理系統&#xff0c;該系統通過圖形化編程語言實現了真空度的高精度測量和控制。利用LabVIEW的強大功能&#xff0c;研制了相應的硬件并設計了完整的軟件解決方案&#xff0c;以滿足工業應用中對真空度監測的精確要求。 項目背景 隨著…

checkra1n越獄出現的USB error -10問題解決

使用checkra1n進行越獄是出現&#xff1a; 解決辦法(使用命令行進行越獄)&#xff1a; 1. cd /Applications/checkra1n.app/Contents/MacOS 2. ./checkra1n -cv 3. 先進入恢復模式 a .可使用愛思助手 b. 或者長按home,出現關機的滑條&#xff0c;同時按住home和電源鍵&#…

spring boot 中 WebClient 與 RestTemplate 的對比總結

以下是 WebClient 與 RestTemplate 的對比總結&#xff0c;以純文本表格形式呈現&#xff1a; 核心特性對比 特性RestTemplateWebClient線程模型同步阻塞&#xff1a;每個請求占用線程&#xff0c;直到響應返回。異步非阻塞&#xff1a;基于事件循環&#xff0c;高效處理高并發…

深入淺出SPI通信協議與STM32實戰應用(W25Q128驅動)(實戰部分)

1. W25Q128簡介 W25Q128 是Winbond推出的128M-bit&#xff08;16MB&#xff09;SPI接口Flash存儲器&#xff0c;支持標準SPI、Dual-SPI和Quad-SPI模式。關鍵特性&#xff1a; 工作電壓&#xff1a;2.7V~3.6V分頁結構&#xff1a;256頁/塊&#xff0c;每塊16KB&#xff0c;共1…

STM32 HAL庫之EXTI示例代碼

外部中斷按鍵控制LED燈 在main.c中 HAL_Init(); 初始化Flash&#xff0c;中斷優先級以及HAL_MspInit函數&#xff0c;也就是 stm32f1xx_hal.c 中 HAL_StatusTypeDef HAL_Init(void) {/* Configure Flash prefetch */ #if (PREFETCH_ENABLE ! 0) #if defined(STM32F101x6) || …

查看手機在線狀態,保障設備安全運行

手機作為人們日常生活中不可或缺的工具&#xff0c;承載著溝通、工作、娛樂等多種功能。保障手機設備的安全運行是我們每個人都非常重要的任務&#xff0c;而了解手機的在線狀態則是其中的一環。通過挖數據平臺提供的在線查詢工具&#xff0c;我們可以方便快捷地查詢手機號的在…

Llama 4全面評測:官方數據亮眼,社區測試顯不足之處

引言 2025年4月&#xff0c;Meta正式發布了全新的Llama 4系列模型&#xff0c;這標志著Llama生態系統進入了一個全新的時代。Llama 4不僅是Meta首個原生多模態模型&#xff0c;還采用了混合專家(MoE)架構&#xff0c;并提供了前所未有的上下文長度支持。本文將詳細介紹Llama 4…

淘寶API驅動跨境選品:多語言詳情頁自動翻譯與本地化定價

淘寶 API 驅動跨境選品實現多語言詳情頁自動翻譯與本地化定價&#xff0c;為跨境電商業務帶來諸多便利與優勢&#xff0c;以下是詳細介紹&#xff1a; 一、多語言詳情頁自動翻譯 技術原理 借助淘寶的 API 接口&#xff0c;獲取商品詳情頁的各類文本信息&#xff0c;包括標題、描…

MFC工具欄CToolBar從專家到小白

CToolBar m_wndTool; //創建控件 m_wndTool.CreateEx(this, TBSTYLE_FLAT|TBSTYLE_NOPREFIX, WS_CHILD | WS_VISIBLE | CBRS_FLYBY | CBRS_TOP | CBRS_SIZE_DYNAMIC); //加載工具欄資源 m_wndTool.LoadToolBar(IDR_TOOL_LOAD) //在.rc中定義&#xff1a;IDR_TOOL_LOAD BITMAP …

【Java面試系列】Spring Boot微服務架構下的分布式事務處理與性能優化詳解 - 3-5年Java開發必備知識

【Java面試系列】Spring Boot微服務架構下的分布式事務處理與性能優化詳解 - 3-5年Java開發必備知識 引言 在當今的微服務架構中&#xff0c;分布式事務處理和性能優化是面試中經常被問及的高頻話題。隨著系統規模的擴大&#xff0c;如何保證數據一致性和系統性能成為了開發者…

【動態規劃】 深入動態規劃—兩個數組的dp問題

文章目錄 前言例題一、最長公共子序列二、不相交的線三、不同的子序列四、通配符匹配五、交錯字符串六、兩個字符串的最小ASCII刪除和七、最長重復子數組 結語 前言 問題本質 它主要圍繞著給定的兩個數組展開&#xff0c;旨在通過對這兩個數組元素間關系的分析&#xff0c;找出…

【C++面向對象】封裝(上):探尋構造函數的幽微之境

每文一詩 &#x1f4aa;&#x1f3fc; 我本將心向明月&#xff0c;奈何明月照溝渠 —— 元/高明《琵琶記》 譯文&#xff1a;我本是以真誠的心來對待你&#xff0c;就像明月一樣純潔無瑕&#xff1b;然而&#xff0c;你卻像溝渠里的污水一樣&#xff0c;對這份心意無動于衷&a…

JavaScript性能優化(下)

1. 使用適當的算法和邏輯 JavaScript性能優化是一個復雜而重要的話題&#xff0c;尤其是在構建大型應用時。通過使用適當的算法和邏輯&#xff0c;可以顯著提高代碼的效率和響應速度。以下是一些關鍵策略和實踐&#xff0c;用于優化JavaScript性能&#xff1a; 1.1. 采用適當…

螞蟻 Flink 實時計算編譯任務 Koupleless 架構改造

張馮君&#xff08;遠遠&#xff09; Koupleless PMC 螞蟻集團技術工程師 就職于螞蟻集團中間件團隊&#xff0c;參與維護與建設螞蟻 SOFAArk 和 Koupleless 開源項目、內部 SOFAServerless 產品的研發和實踐。 本文 3488 字&#xff0c;預計閱讀 11 分鐘 業務背景 基于開源 A…

使用pycharm社區版調試DIFY后端python代碼

目錄 背景 前置條件 DIFY使用的框架 API服務調試配置步驟&#xff08;基于tag為0.15.3的版本&#xff09; 1.配置.env文件 2.關閉docker里面的docker-api-1服務 3.使用DOCKER啟動本地環境需要用到的中間件&#xff0c;并暴露端口 注意事項一&#xff1a; 注意事項二&#xff1a…

從 macos 切換到 windows 上安裝的工具類軟件

起因 用了很多年的macos, 已經習慣了macos上的操作, 期望能在windows上獲得類似的體驗, 于是花了一些時間來找windows上相對應的軟件. 截圖軟件 snipaste?????? windows和macos都有的軟件, 截圖非常好用 文件同步軟件 oneDrive: 嘗試了不同的同步軟件, 還是微軟在各…

MySQL體系架構(一)

1.1.MySQL的分支與變種 MySQL變種有好幾個,主要有三個久經考驗的主流變種:Percona Server,MariaDB和 Drizzle。它們都有活躍的用戶社區和一些商業支持,均由獨立的服務供應商支持。同時還有幾個優秀的開源關系數據庫,值得我們了解一下。 1.1.1.Drizzle Drizzle是真正的M…