醫藥采購系統平臺第4天03:實現根據用戶的角色顯示不同用戶的權限菜單編寫攔截器實現權限攔截模塊的開發流程和測試流程小節

如果想要獲取相關的源碼,筆記,和相關工具,對項目需求的二次開發,可以關注我并私信!!!


四 權限管理(用戶授權)的應用:根據用戶的角色顯示不同用戶的權限菜單

經過上面的與第三方系統的成功的接入,而且在“角色管理”菜單中也對需要授權的角色進行了授權--->給一級菜單和二級菜單授權給了衛生室,那么,接下來就需使用衛生室登錄系統,看看頁面中的導航菜單中是否顯示了添加的一級菜單和二級菜單導航菜單!

簡單說,本節中所要實現的功能是:驗證用戶的權限菜單!就是使用不同的用戶登錄系統,并根據用戶的角色獲取他的權限菜單,并在左側頁面中的導航欄中顯示!

即:根據不同用戶的登錄來顯示不同用戶的菜單!

舉例來說:使用衛生局和衛生室兩個角色分別登錄系統,在導航欄中的權限菜單的顯示也是不同的!

因此,first.jsp頁面中發送的請求中的Menu.json文件可以不需要了!同時,本節的內容需要和第7節的內容分步來實現權限管理的應用的

該節內容總結就是:

用戶登錄成功后,根據用戶所屬的角色來從數據庫中查出用戶的菜單權限,然后將菜單權限存儲至session中,從而實現不同的用戶登錄,顯示出不同的菜單

因此,也可以說菜單權限屬于粗顆粒度的權限管理范疇!

1 DAO

1.1 sql語句的編寫(有難度

再次強調:在寫sql語句之前,必須要對這9張表之間的關系爛熟于心

這9張表之間的關系可以參考“第三方用戶授權系統表關系.xlsx”文件,或者參考“本系統的權限管理模型”一節中的內容和視頻!!

需求:根據用戶角色獲取該角色下所有的一級和二級菜單。注意:是所有的一級和二級菜單,而不是某個一級菜單下的二級菜單!這樣做是為了節省性能。

主查詢表:權限菜單表bss_sys_module表可以查看所有的一級菜單和二級菜單,它是一個樹形結構。其中parentid字段值為0表示一級菜單,而parentid的值中不為0的都是二級菜單,并且,所有的二級菜單中都有url鏈接地址.

如下圖:

關聯查詢表:角色表、角色系統關系表、角色節點關系表、角色菜單關系表、角色操作關系表。

--查詢某個衛生室的所有一級和二級菜單

select m1.moduleid menuid,

       m1.name menuname,

       m2.moduleid menuid_two, 

--之所以別名是menuid_two,而不是menuid.是因為mybatis對于結果集中兩個相同的menuid字段是無法實現映射的,雖然這兩個字段的內容相同,但是字段名稱絕對不可以相同。

       m2.name menuname_two,

       m2.url

  --這里設定m1中存放的是所有的一級菜單,m2中存放的是所有的二級菜單

from bss_sys_module m1, bss_sys_module m2

--自連接條件

 where m2.parentid = m1.moduleid

   and m1.parentid = '0'   --表示所有的一級菜單

   and m2.parentid != '0'  --表示所有的二級菜單

 --該條件用來限定某個角色下所有的二級菜單,因此,范圍在m2.moduleid之內     

   and m2.moduleid in  

       (

        

        ---限定某個角色范圍內的菜單

        select bss_sys_rolemodule.moduleid

          from bss_sys_role,

                bss_sys_rolesys,

                bss_sys_rolenode,

                bss_sys_rolemodule,

                bss_sys_roleoperate

                --角色表和角色系統表的關聯

         where bss_sys_role.roleid = bss_sys_rolesys.roleid

                 

           and bss_sys_rolenode.rsid = bss_sys_rolesys.rsid

           and bss_sys_rolemodule.rnid = bss_sys_rolenode.rnid

           and bss_sys_roleoperate.rmid = bss_sys_rolemodule.rmid

           ---假設角色id是衛生室

           and bss_sys_role.roleid = '511A6F41419949C38122A94310DADD14')

 order by m1.showorder, m2.showorder  ---排序,showorder字段是排序字段  

1.2 VO類的定義

VO的定義--->Menu.java

其中定義的:List<Menu>  meus屬性中存儲的是二級菜單。

這Menu類中屬性的定義就是一對多的結構定義。(牢記)!

之所以單獨定義一個Menu類,是為了方便直接轉換成json格式的數據,因為頁面中的權限菜單需要使用JSON格式的數量來顯示(這是該系統的開發規范之一)!

(可以參考下面的FirstAction類中的獲取菜單方法usermenu()方法會使用到).

1.3 mapper映射文件的定義(一對多查詢)

因為是一對多的映射,即:一個用戶(角色)對應多個權限菜單,所以必須使用resultMap實現映射

關于該映射文件中各個屬性的含義,請參考“mybatis的高級知識.doc”文檔!!!!

在SysuserMapperCustom.xml映射文件中添加如下內容:顏色加深加粗的都是添加的內容。

<!-- 一對多映射 -->

<resultMap id="findMenuByroleidResultMap" type="yycg.base.pojo.vo.Menu">

<!-- column=menuid表示唯一的數據庫查詢語句中的主鍵。因為在sql語句的結果集中,mybatis會自動把結果集中的menuid主鍵字段相同的記錄進行合并 -->

<id column=

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

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

相關文章

#2 物聯網組成要素

從下至上&#xff0c;則包括了5個要素&#xff0c;包括 設備 / 傳感器 / 網絡 / 物聯網服務 / 數據分析 這五個要素。為了便于理解&#xff0c;我們用思維導圖展示 物聯網構成架構 設備 能夠感測和反饋并連到網絡進行物聯網服務的裝置 傳感器 傳感器和網關的融合實現了物…

< 自用文 Project-30.6 Crawl4AI > 為AI模型優化的網絡爬蟲工具 幫助收集和處理網絡數據的工具

官方鏈接&#xff1a; Github &#xff1a;https://github.com/unclecode/crawl4ai 文檔主頁&#xff1a;https://docs.crawl4ai.com/ 當前版本&#xff1a;Crawl4AI v0.5.0 主要新功能&#xff1a; 可配置策略&#xff08;廣度優先、深度優先、最佳優先&#xff09;探索整…

【Kafka基礎】監控與維護:動態配置管理,靈活調整集群行為

1 基礎配置操作 1.1 修改主題保留時間 /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-configs.sh --alter \--bootstrap-server 192.168.10.33:9092 \--entity-type topics \--entity-name yourtopic \--add-config retention.ms86400000 參數說明&#xff1a; retention…

04-微服務 面試題-mk

文章目錄 1.Spring Cloud 常見的組件有哪些?2.服務注冊和發現是什么意思?(Spring Cloud 如何實現服務注冊發現)3.Nacos配置中心熱加載實現原理及關鍵技術4.OpenFeign在微服務中的遠程服務調用工作流程5.你們項目負載均衡如何實現的 ?6.什么是服務雪崩,怎么解決這個問題?…

Redis最佳實踐——秒殺系統設計詳解

基于Redis的高并發秒殺系統設計&#xff08;十萬級QPS&#xff09; 一、秒殺系統核心挑戰 瞬時流量洪峰&#xff1a;100萬 QPS請求沖擊庫存超賣風險&#xff1a;精準扣減防止超賣系統高可用性&#xff1a;99.99%服務可用性要求數據強一致性&#xff1a;庫存/訂單/支付狀態同步…

AI大模型從0到1記錄學習 數據結構和算法 day18

3.3.1 棧的概述 棧&#xff08;Stack&#xff09;是一個線性結構&#xff0c;其維護了一個有序的數據列表&#xff0c;列表的一端稱為棧頂&#xff08;top&#xff09;&#xff0c;另一端稱為棧底&#xff08;bottom&#xff09;。棧對數據的操作有明確限定&#xff0c;插入元素…

粘性定位(position:sticky)——微信小程序學習筆記

1. 簡介 CSS 中的粘性定位&#xff08;Sticky positioning&#xff09;是一種特殊的定位方式&#xff0c;它可以使元素在滾動時保持在視窗的特定位置&#xff0c;類似于相對定位&#xff08;relative&#xff09;&#xff0c;但當頁面滾動到元素的位置時&#xff0c;它會表現得…

通過使用 include 語句加載并執行一個CMake腳本來引入第三方庫

通過使用 include 語句加載并執行一個CMake腳本來引入第三方庫 當項目中使用到第三方庫時&#xff0c;可以通過使用 include 語句來加載并執行一個CMake腳本&#xff0c;在引入的CMake腳本中進行第三方庫的下載、構建和庫查找路徑的設置等操作&#xff0c;以這種方式簡化項目中…

DNS正反向解析復習,DNS主從服務,轉發服務及DNS和nginx聯合案例

正向解析 1、配置主機名 [rootlocalhost ~]# dnf install bash-completion -y #一個按tap鍵補全的軟件 [rootlocalhost ~]# hostnamectl hostname dns #改主機名為dns [rootlocalhost ~]# exit ssh root你的IP地址 要重啟才會生效2、安裝bind [rootdns ~]# dnf install b…

網絡安全·第一天·IP協議安全分析

本篇博客講述的是網絡安全中一些協議缺陷以及相應的理論知識&#xff0c;本博主盡可能講明白其中的一些原理以及對應的防衛措施。 學習考研408的同學也能進來看看&#xff0c;或許對考研有些許幫助&#xff08;按照考研現在的趨勢&#xff0c;年年都有新題目&#xff0c;本文當…

【詳解】Nginx配置WebSocket

目錄 Nginx配置WebSocket 簡介 準備工作 檢查 Nginx 版本 配置 Nginx 支持 WebSocket 修改 Nginx 配置文件 解釋配置項 測試配置 測試 WebSocket 連接 WebSocket 服務端 (Node.js) WebSocket 客戶端 (HTML JavaScript) 運行測試 Nginx 配置文件示例 解釋 測試配…

《軌道力學講義》——第八講:行星際軌道設計

第八講&#xff1a;行星際軌道設計 引言 行星際軌道設計是探索太陽系的核心技術&#xff0c;它涉及如何規劃和優化航天器從一個天體到另一個天體的飛行路徑。隨著人類探索太陽系的雄心不斷擴大&#xff0c;從最初的月球探測到火星探測&#xff0c;再到更遙遠的外太陽系探測&a…

操作系統學習筆記——[特殊字符]超詳細 | 如何喚醒被阻塞的 socket 線程?線程阻塞原理、線程池、fork/vfork徹底講明白!

&#x1f4a1;超詳細 | 如何喚醒被阻塞的 socket 線程&#xff1f;線程阻塞原理、線程池、fork/vfork徹底講明白&#xff01; 一、什么是阻塞&#xff1f;為什么線程會阻塞&#xff1f;二、socket線程被阻塞的典型場景&#x1f9e0; 解法思路&#xff1a; 三、線程的幾種阻塞狀…

第十六屆藍橋杯大賽軟件賽省賽 Python 大學 B 組 滿分題解

題面鏈接Htlang/2025lqb_python_b 個人覺得今年這套題整體比往年要簡單許多&#xff0c;但是G題想簡單了出大問題&#xff0c;預估50101015120860&#xff0c;道阻且長&#xff0c;再接再厲 代碼僅供學習參考&#xff0c;滿分為賽后洛谷中的測評&#xff0c;藍橋杯官方測評待…

若依代碼生成器原理velocity模板引擎(自用)

1.源碼分析 代碼生成器:導入表結構(預覽、編輯、刪除、同步)、生成前后端代碼 代碼生成器表結構說明&#xff1a; 若依提供了兩張核心表來存儲導入的業務表信息&#xff1a; gen_table&#xff1a;存儲業務表的基本信息 &#xff0c;它對應于配置代碼基本信息和生成信息的頁…

如何制定有效的風險應對計劃

制定有效的風險應對計劃的核心在于&#xff1a; 識別潛在風險、評估風險的影響與概率、選擇合適的應對策略、建立動態監控和反饋機制。 其中&#xff0c;識別潛在風險是最為關鍵的第一步。只有準確識別出可能的風險&#xff0c;才能在后續的評估、應對、監控等環節中做到有的放…

A2A協議實現詳解及示例

A2A協議概述 A2A (Agent2Agent) 是Google推出的一個開放協議&#xff0c;旨在使AI智能體能夠安全地相互通信和協作。該協議打破了孤立智能體系統之間的壁壘&#xff0c;實現了復雜的跨應用自動化。[1] A2A協議的核心目標是讓不同的AI代理能夠相互通信、安全地交換信息以及在各…

【中級軟件設計師】前趨圖 (附軟考真題)

【中級軟件設計師】前趨圖 (附軟考真題) 目錄 【中級軟件設計師】前趨圖 (附軟考真題)一、歷年真題三、真題的答案與解析答案解析 復習技巧&#xff1a; 若已掌握【前趨圖】相關知識&#xff0c;可直接刷以下真題&#xff1b; 若對知識一知半解&#xff0c;建議略讀題目&#x…

調節磁盤和CPU的矛盾——InnoDB的Buffer Pool

緩存的重要性 無論是用于存儲用戶數據的索引【聚簇索引、二級索引】還是各種系統數據&#xff0c;都是以頁的形式存放在表空間中【對一個/幾個實際文件的抽象&#xff0c;存儲在磁盤上】如果需要訪問某頁的數據&#xff0c;就會把完整的頁數據加載到內存中【即使只訪問頁中的一…

springboot和springcloud的區別

1. ?目的與功能? ?1)Spring Boot?: 主要用于快速構建獨立的、生產級的 Spring 應用程序。它通過自動配置和嵌入式服務器等特性,簡化了微服務的開發、啟動和部署,使開發者能夠專注于業務邏輯而非繁瑣的配置。?Spring Boot是一個快速開發的框架,旨在簡化Java應用程序的開…