ABP開發框架前後端開發系列---(9)ABP框架的許可權控制管理

来源:https://www.cnblogs.com/wuhuacong/archive/2019/06/21/11065811.html
-Advertisement-
Play Games

在前面兩篇隨筆《ABP開發框架前後端開發系列---(7)系統審計日誌和登錄日誌的管理》和《ABP開發框架前後端開發系列---(8)ABP框架之Winform界面的開發過程》開始介紹了許可權管理的內容,其中只是列出了內部的許可權系統的審計和登陸信息,以及對Winform界面的整合,本篇隨筆繼續介紹ABP開... ...


在前面兩篇隨筆《ABP開發框架前後端開發系列---(7)系統審計日誌和登錄日誌的管理》和《ABP開發框架前後端開發系列---(8)ABP框架之Winform界面的開發過程》開始介紹了許可權管理的內容,其中只是列出了內部的許可權系統的審計和登陸信息,以及對Winform界面的整合,本篇隨筆繼續介紹ABP開發框架的許可權控制管理內容,包括用戶、角色、機構、許可權等方面,以及該框架在Winform方面的應用集成。

1、ABP框架的許可權控制管理內容

我們知道,許可權管理一般都會涉及到用戶、組織機構、角色,以及許可權功能等方面的內容,ABP框架的基礎內容也是涉及到這幾方面的內容,其中它們之間的關係基本上是多對多的關係,它們的關係如下所示。

不過在官網下載的框架裡面,包含許可權管理這些應用服務層和展示層的內容並不完整,只是簡單的包括了用戶和角色的基礎管理,而且很多許可權管理所需要的基礎功能並沒有提供。

根據ABP框架提供的基礎資料庫表,我們可以進一步整理許可權管理幾個重要概念和真實資料庫表之間的對應關係,基於這個基礎上,我們可以完善整個許可權管理模塊內容。

上圖是ABP基礎框架中許可權模塊裡面包含的一些主對象表和中間表,中間表主要用來存儲兩個對象之間的多對多關係,如角色包含多個用戶,用戶屬於多個機構,機構包含多個角色等等。

 

2、基於ABP框架的許可權管理模塊

1)組織機構管理 

組織機構主要就是一個層級的對象關係,一般包含但不限於公司、部門、工作組等的定義,其中組織機構包含用戶成員和角色成員的關係,如下界面所示。

組織機構包含的成員可以添加多個人員記錄,添加界面如下所示。

添加角色界面如下所示。

 

 2)角色管理

角色信息沒有層級關係,可以通過列表展示。

其中角色包含許可權分配和角色成員的維護,如下是角色編輯界面,包含角色基本信息、許可權、成員管理等。

角色的許可權包含系統可以用的許可權,並可以勾選為角色設置所需的功能點,如下界面所示。

用戶成員則和機構的用戶管理一樣,可以指定多個用戶。

3)用戶管理

用戶管理只需要管理用戶基本的信息即可,我們如果需要分配角色可以在角色管理裡面統一處理。當然,創建用戶的時候,也可以ABP框架的收費版本界面一樣,為用戶指定角色和機構信息。

我這裡主要是維護用戶信息即可,用戶列表界面如下所示。

用戶編輯或者查看界面,除了可以看用戶基礎信息外,可以查看用戶包所屬的機構(多個),或者所屬的角色(多個)

當然可以查看這個用戶本身擁有的許可權功能點,如下界面所示。

4)許可權功能

 嚴格來說,ABP框架並沒有統一管理好許可權功能點的,它沒有任何表來存儲這個功能集合,而是通過派生AuthorizationProvider的子類來定義許可權功能點,這種需要通過指定AuthorizationProvider的子類的方式創建功能點,需要每次系統模塊增加功能點的時候,編碼一下,然後增加自己的功能點,如下界面所示。

這種方式可能能夠滿足大多數的需要,不過我如果需要增量開發,或者動態增加某些功能點的時候,就有點不方便了。

我在這個基礎上引入了一個許可權功能的表用來存儲功能點的,然後提供管理界面來動態維護這些功能點。如下界面所示。

這樣我可以動態添加或者批量添加所需要的功能點,並且和整個許可權管理模塊串聯起來,形成一個完整的控制體系。

 

這些概念主要還是來源於我的Winform開發框架和混合式開發框架裡面的控制思路,以及界面展示的處理。

這樣我們就可以管理自己的許可權功能點,並可以為指定的角色配置相關的控制功能點,如下表所示是角色的許可權集合(系統中間表),也就是給角色分配的功能點,依舊是在原來的系統表裡面存儲。

 

3、許可權控制在業務模塊界面中的使用

我們擁有了用戶、角色、機構、許可權功能以及它們之間的關係後,我們可以按照一個完善的許可權系統來創建對應的用戶角色許可權關係,並通過在客戶端對界面許可權的判斷和服務端對操作許可權的判斷,實現完整的控制處理。

服務端由ABP框架內置許可權進行管理,通過在AppService裡面定義好增刪改查等許可權點,如引用服務層的基類設置了幾個許可權點的屬性。

我們在子類裡面指定這些操作的變數即可,如產品應用服務中,我們可以定義CreatePermissionName為 Product/Add 這樣的名稱,當然也可以自定義。

然後每次在Action中調用相應的檢查即可,如下是對創建的判斷檢查。

或者更新操作的許可權檢查

如果對於導入、導出等其他許可權,我們則可以通過調用

void CheckPermission(string permissionName);

來進行自己自定義許可權名稱的判斷。

在客戶端,我們登錄成功後,獲取用戶的許可權集合,然後在客戶端進行判斷即可進行許可權的控制管理,可以控制菜單、按鈕等界面元素,如下是整合了許可權控制的產品信息管理界面。

分頁列表展示界面的控制代碼如下所示。

編輯或者查看界面的控制代碼如下所示

這樣我們 就可以整合了許可權到業務管理模塊裡面,實現對菜單、按鈕等元素的許可權控制了。

首先在許可權管理系統模塊裡面為用戶角色添加對應的產品管理許可權點。

產品信息界面展示如下所示。

如果在許可權模塊的角色裡面取消對應的功能點,那麼產品管理功能不可用。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 6.21自我總結 一.爬取鬥圖網 1.摘要 2.爬取代碼 ...
  • 迴圈結構 :for 迴圈四要素: 1.初始化條件 2.迴圈條件 3.迴圈體 4.迭代條件 格式: for(初始化條件;迴圈條件;迭代條件){ 迴圈體; } 執行順序 :1 -> 2 -> 3 -> 4 ->2 -> 3 -> 4 ...... 2 說明: 1.初始化條件只執行一次 2.迴圈條件的結果 ...
  • 迴圈結構 :do-while 迴圈四要素: 1.初始化條件 2.迴圈條件 3.迴圈體 4.迭代條件 格式: 1.初始化條件 do{ 3.迴圈體 4.迭代條件 }while(2.迴圈條件); do-while和while的區別? ...
  • ``` Date: 表示特定的瞬間,精確到毫秒,通過方法設定自己所表示的時間,可以表示任意的時間 System.currentTimeMillis() :返回的當前系統時間, 1970-1-1 至今的毫秒數 SimpleDateFormat sdf = new SimpleDateFormat("y... ...
  • 1.遍歷key值 同理,可把下列代碼的d改為d.keys() notice:python2除了上述兩種方法外,還可以寫為d.iterkeys() 2.遍歷value值 同理,可把下列代碼的d改為d.values() notice:python2除了上述兩種方法外,還可以寫為d.itervalues( ...
  • 容器可設置佈局管理器,管理容器中組件的佈局: container.setLayout(new XxxLayout()); Java有6種佈局管理器,AWT提供了5種: FlowLayout BorderLayout GridLayout GridBagLayout CradLayout Swing還 ...
  • Github https://github.com/gongluck/SDL2 study/tree/master/Csdl2 Csdl2.h Csdl2.cpp 測試 C++ include "Csdl2.h" include include include define TESTCHECKRET ...
  • 讓我們考慮一個簡單的編程挑戰:對大數組中的所有元素求和。現在可以通過使用並行性來輕鬆優化這一點,特別是對於具有數千或數百萬個元素的巨大陣列,還有理由認為,並行處理時間應該與常規時間除以CPU核心數一樣多。事實證明,這一壯舉並不容易實現。我將向您展示幾種並行執行此操作的方法,它們如何改善或降低性能以及 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...