芋道RBAC實現介紹

說明:之前寫過一篇博客,介紹如何搭建一個基于角色的權限驗證框架

  • 搭建一個基于角色的權限驗證框架

本文介紹在非常受歡迎的開源框架——芋道中是如何實現 RBAC 的,芋道的部署參考下面這篇文章:

  • 芋道微服務代碼部署

介紹

一般來說,系統內用戶權限分以下兩類,RBAC(基于角色的權限驗證)對應的是第一類。

  • 菜單權限:用戶能看到那些菜單,與用戶所擁有的角色掛鉤;

  • 數據權限:用戶能看到那些數據,與用戶所處的部門掛鉤;

(1)數據庫表設計

五張表,三張實體表,兩張映射表。通過給角色賦予菜單,用戶賦予角色來控制用戶所能訪問的菜單,RBAC 的基礎操作

在這里插入圖片描述

(2)接口設計

用戶賦予角色,角色賦予權限接口

在這里插入圖片描述

實際上就是往兩張映射表里寫數據

在這里插入圖片描述

(3)接口校驗

用戶僅能看到所擁有角色權限內的菜單,需要前端和后端共同實現,前端僅展示當前用戶能看到的菜單(包括按鈕),后端需要給每個接口設置權限標識,沒有權限的用戶訪問接口會被攔截。

看芋道是怎么實現的?下面這個接口返回了當前用戶權限信息,包括了用戶信息、角色信息和菜單權限信息

在這里插入圖片描述

前端通過返回的數據,展示對應的菜單和按鈕。另外,在管理員或者擁有修改某角色權限的用戶修改角色的菜單權限時,保證對應角色用戶的權限能實時生效,前端可以控制調用該接口的時機。

也就是什么時候調用該接口?是登錄時調用一次,還是進入菜單,展示內容前先調用查一遍?這決定了角色權限生效的時效。

在這里插入圖片描述

在后端,需要給每個按鈕對應訪問的接口設置權限標識,并在用戶訪問時判斷當前用戶是否擁有該權限。如下,

在這里插入圖片描述

點進去,查看實現,也還是通過當前用戶 ID + 權限標識判斷

在這里插入圖片描述

hasAnyPermissionsCache 是用戶 ID 對應權限的 Map 集合,使用了本地緩存,過期時間 1 分鐘

在這里插入圖片描述

查看數據來源,也就是用用戶 ID 去查了數據庫,獲取當前用戶的所有角色

在這里插入圖片描述

查出角色后再查角色所擁有的權限,挨個與當前傳入的權限標識比較,看在不在這里面

在這里插入圖片描述

(4)設置當前用戶

這里,在校驗 token 的攔截器中,將當前用戶信息設置到上線文中

在這里插入圖片描述

這里放了 用戶 ID 和用戶 Type,如果你需要用到用戶的其他信息,如 用戶名、性別等,也可以在這里加

在這里插入圖片描述

擴展

這里演示新增一個接口,加入到 RBAC 校驗體系中。

(1)新增按鈕

在系統設置中,新增一個按鈕,這里可以選按鈕所在的上級菜單,及該按鈕在哪個頁面里,再設置一個權限標識,這個標識前端用于判斷是否展示按鈕,后端用于校驗用戶是否擁有訪問權限,所以前后端要約定好。

在這里插入圖片描述

(2)開發接口

接著,后端程序員就去開發自己的接口,開發完后,在接口上加上這行校驗注解

在這里插入圖片描述

(3)測試

創建一個角色,將該權限不賦予給這個角色

在這里插入圖片描述

再將這個角色賦予給某個用戶

在這里插入圖片描述

設置完,前端應該不會給這個用戶展示這個按鈕,使用 apifox 用該用戶的 token 調用該接口,提示沒有操作權限

在這里插入圖片描述

總結

本文介紹了在芋道框架中 RBAC 實現的細節

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

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

相關文章

Docker部署Jellyfin,沒有公網IP如何使用內網穿透遠程訪問?

Jellyfin是一款完全開源、免費的媒體服務器,可幫助你快速搭建屬于自己的私人流媒體平臺:電影、劇集、音樂、照片統統收納,跨設備隨點隨播。本文將以最簡潔的步驟,演示如何在Docker容器中部署Jellyfin,并通過貝銳花生殼…

Podman:Mysql(使用卷)

下載鏡像hpphcomp:~$ podman pull docker.1ms.run/mysql:latest Trying to pull docker.1ms.run/mysql:latest... Getting image source signatures Copying blob c81e70a25040 done | Copying blob 31f7d8dc4024 done | Copying blob b9916866e45f done | Copying blob …

2025年滲透測試面試題總結-21(題目+回答)

安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。 目錄 一、文件上傳繞過方式(Top 5) 二、文件包含高危函數(PHP為例&#xff0…

像海綿一樣吸收技術書籍的高效學習方法

像海綿一樣吸收技術書籍的高效學習方法前言六步高效閱讀法步驟1:快速瀏覽章節步驟2:先讀章末測驗步驟3:只讀粗體字步驟4:只讀每段的首句和末句步驟5:通讀整章步驟6:復習與重復高效學習技術書籍的實用技巧1.…

Day60--圖論--94. 城市間貨物運輸 I(卡碼網),95. 城市間貨物運輸 II(卡碼網),96. 城市間貨物運輸 III(卡碼網)

Day60–圖論–94. 城市間貨物運輸 I(卡碼網),95. 城市間貨物運輸 II(卡碼網),96. 城市間貨物運輸 III(卡碼網) 今天是Bellman_ford專場。帶你從普通的Bellman_ford,到隊列…

Jenkins服務器SSH公鑰配置步驟

步驟1. 在Jenkins服務器上生成SSH密鑰在Jenkins服務器上執行以下命令:# 1. 生成SSH密鑰對 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""# 2. 設置正確的權限 chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub# 3. 查看公鑰內…

數據鏈路層-網絡層-傳輸層

文章目錄深入淺出理解網絡核心:從交換機到TCP/UDP一、數據鏈路層:交換機的"地盤"1. 數據鏈路層的核心功能2. 以太網的發展歷程3. 以太網中的MAC地址4. 以太網幀格式:數據的"快遞包裝"5. 交換機的工作原理:高效…

專題:2025跨境電商市場布局、供應鏈與產業帶賦能報告 |附130+份報告PDF、原數據表匯總下載

原文鏈接:https://tecdat.cn/?p43616 2025年,跨境圈的老板們集體焦慮:美國關稅飆到145%,亞馬遜封號潮卷土重來,而東南亞卻悄悄漲了246%!這不是危言聳聽——66%的美國消費者說,海外貨漲10%就換本…

LINUX 818 shell:random;for for

問題 [rootweb ~]# a$(echo $[$RANDOM%10]) 您在 /var/spool/mail/root 中有郵件 [rootweb ~]# echo $a 3 [rootweb ~]# echo 139$a$a$a$a$a$a$a$a 13933333333 您在 /var/spool/mail/root 中有郵件 [rootweb ~]# echo 139 $a 139 3 [rootweb ~]# echo $a 3 [rootweb ~]# echo …

JavaScript 原型機制詳解:從概念到實戰(附個人學習方法)

原型是 JavaScript 實現繼承與代碼復用的核心機制,也是面試高頻考點。本文結合個人學習經驗、核心概念解析與實戰案例,幫你徹底搞懂原型、prototype、__proto__ 及相關知識點,同時分享高效的學習方法。 一、個人學習方法:高效掌握復雜知識點 復雜概念(如原型)的學習,關…

【人工智能】2025年AI代理失控危機:構建安全壁壘,守護智能未來

還在為高昂的AI開發成本發愁?這本書教你如何在個人電腦上引爆DeepSeek的澎湃算力! 在2025年,AI代理(AI Agents)已成為日常生活和企業運營的核心組成部分,它們能夠自主決策、執行任務并與環境互動。然而,隨著AI代理能力的指數級提升,其安全隱患也日益凸顯,包括數據泄露…

從噪聲到動作:Diffusion Policy 如何改變機器人學習?

從噪聲到動作:Diffusion Policy 如何改變機器人學習? 引言 在機器人手臂操作方面一直存在諸多挑戰。我們熟悉的工業場景中的組裝機械臂,往往依賴于寫死的程序指令進行控制,具有高度規范化與高精度的特點。而當機械臂需要在復雜、…

量子計算和超級計算機將徹底改變技術

我們生活在技術時代,但未來仍有無限可能。近年來,各大企業在量子計算領域持續邁出雖小卻關鍵的步伐 —— 這一技術注定將徹底改變我們所熟知的世界。以下精選的潛在應用場景,將對從交通出行到醫療健康的多個領域產生深遠影響。 在由 “1” 和…

Linux 中文顯示空白框(Java)

問題展示:解決方案本系統采用宋體,若是其它字體,可以類似排查Font rewardFirstFont new Font("SimSun", Font.BOLD, 20);linux系統字體-檢查查詢linux系統所有字體fc-list檢查是否有目標字體(SimSun)&#…

普通用戶使用docker命令

參考大佬 https://blog.51cto.com/u_16175448/12082279 詳細步驟及代碼 步驟 1:安裝 Docker 首先,你需要安裝 Docker。 步驟 2:創建 Docker 用戶組 Docker 默認以 root 用戶運行,為了普通用戶能夠使用 Docker,我們需要…

【傳奇開心果系列】Flet框架實現的家庭記賬本示例自定義模板

Flet家庭記賬本示例自定義模板一、效果展示截圖二、Flet家庭記賬本概況介紹三、應用特色1. 簡潔直觀的用戶界面2. 全面的財務管理功能3. 實時數據監控4. 數據可視化分析5. 數據管理功能四、使用場景個人財務管理家庭賬務管理小微企業記賬學生理財教育五、主要功能模塊&#xff…

Node.js 在 Windows Server 上的離線部署方案

Node.js 在 Windows Server 上的離線部署方案 離線部署的核心是提前準備所有依賴資源(避免在線下載),并通過本地配置完成服務搭建,整體分為「依賴準備」「環境配置」「項目部署」「服務注冊」4個階段。 一、提前準備離線資源&am…

SpringAI接入openAI配置出現的問題全解析

SpringAI接入openAI配置出現的四個問題全解析1、無法下載openAI或SpringAI依賴包1.1、思路就是從哪個源下載所需的依賴包1.2、解決思路:我們可以看阿里的中央倉庫是否有集成SpringAI的依賴,從它這里下也是可以的。我們看看阿里云云效maven地址&#xff0…

自然語言處理——02 文本預處理(上)

1 認識文本預處理 概念: 文本語料在輸送給模型前一般需要一系列的預處理工作,才能符合模型輸入的要求;比如:將文本轉化成模型需要的張量、規范張量的尺寸;比如: 關于數據X:數據有沒有臟數據、數…

數據結構:二叉樹的鏈式存儲

用鏈表來表示一棵二叉樹,即用指針指向來指示元素的邏輯關系。通常的方法是鏈表中每個結點由三個域組成,數據域和左右指針域,左右指針分別用來給出該結點左孩子和右孩子所在的鏈結點的存儲地址 。 我們之前就已經說過,二叉樹是遞歸…