1. 程式人生 > >ABP開發框架前後端開發系列---(9)ABP框架的許可權控制管理

ABP開發框架前後端開發系列---(9)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);

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

在客戶端,我們登入成功後,獲取使用者的許可權集合,然後在客戶端進行判斷即可進行許可權的控制管理,可以控制選單、按鈕等介面元素,如下是整合了許可權控制的產品資訊管理介面。

分頁列表展示介面的控制程式碼如下所示。

編輯或者檢視介面的控制程式碼如下所示

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

首先在許可權管理系統模組裡面為使用者角色新增對應的產品管理許可權點。

產品資訊介面展示如下所示。

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

&n