ABP開發框架先後端開發系列---(9)ABP框架的權限控制管理

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

一、ABP框架的權限控制管理內容

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

不過在官網下載的框架裏面,包含權限管理這些應用服務層和展現層的內容並不完整,只是簡單的包括了用戶和角色的基礎管理,並且不少權限管理所須要的基礎功能並無提供。後端

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

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

 

二、基於ABP框架的權限管理模塊

1)組織機構管理 編碼

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

組織機構包含的成員能夠添加多我的員記錄,添加界面以下所示。3d

添加角色界面以下所示。日誌

 

 2)角色管理code

角色信息沒有層級關係,能夠經過列表展現。

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

角色的權限包含系統能夠用的權限,並能夠勾選爲角色設置所需的功能點,以下界面所示。

用戶成員則和機構的用戶管理同樣,能夠指定多個用戶。

3)用戶管理

用戶管理只須要管理用戶基本的信息便可,咱們若是須要分配角色能夠在角色管理裏面統一處理。固然,建立用戶的時候,也能夠ABP框架的收費版本界面同樣,爲用戶指定角色和機構信息。

我這裏主要是維護用戶信息便可,用戶列表界面以下所示。

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

固然能夠查看這個用戶自己擁有的權限功能點,以下界面所示。

4)權限功能

 嚴格來講,ABP框架並無統一管理好權限功能點的,它沒有任何表來存儲這個功能集合,而是經過派生AuthorizationProvider的子類來定義權限功能點,這種須要經過指定AuthorizationProvider的子類的方式建立功能點,須要每次系統模塊增長功能點的時候,編碼一下,而後增長本身的功能點,以下界面所示。

這種方式可能可以知足大多數的須要,不過我若是須要增量開發,或者動態增長某些功能點的時候,就有點不方便了。

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

這樣我能夠動態添加或者批量添加所須要的功能點,而且和整個權限管理模塊串聯起來,造成一個完整的控制體系。

 

這些概念主要仍是來源於個人Winform開發框架和混合式開發框架裏面的控制思路,以及界面展現的處理。

這樣咱們就能夠管理本身的權限功能點,並能夠爲指定的角色配置相關的控制功能點,以下表所示是角色的權限集合(系統中間表),也就是給角色分配的功能點,依舊是在原來的系統表裏面存儲。

 

三、權限控制在業務模塊界面中的使用

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

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

咱們在子類裏面指定這些操做的變量便可,如產品應用服務中,咱們能夠定義CreatePermissionName爲 Product/Add 這樣的名稱,固然也能夠自定義。

而後每次在Action中調用相應的檢查便可,以下是對建立的判斷檢查。

或者更新操做的權限檢查

若是對於導入、導出等其餘權限,咱們則能夠經過調用

void CheckPermission(string permissionName);

來進行本身自定義權限名稱的判斷。

在客戶端,咱們登陸成功後,獲取用戶的權限集合,而後在客戶端進行判斷便可進行權限的控制管理,能夠控制菜單、按鈕等界面元素,以下是整合了權限控制的產品信息管理界面。

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

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

這樣咱們 就能夠整合了權限到業務管理模塊裏面,實現對菜單、按鈕等元素的權限控制了。

首先在權限管理系統模塊裏面爲用戶角色添加對應的產品管理權限點。

產品信息界面展現以下所示。

若是在權限模塊的角色裏面取消對應的功能點,那麼產品管理功能不可用。