ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理
在前面兩篇隨筆《ABP開發(fā)框架前后端開發(fā)系列---(7)系統(tǒng)審計(jì)日志和登錄日志的管理》和《ABP開發(fā)框架前后端開發(fā)系列---(8)ABP框架之Winform界面的開發(fā)過程》開始介紹了權(quán)限管理的內(nèi)容,其中只是列出了內(nèi)部的權(quán)限系統(tǒng)的審計(jì)和登陸信息,以及對(duì)Winform界面的整合,本篇隨筆繼續(xù)介紹ABP開發(fā)框架的權(quán)限控制管理內(nèi)容,包括用戶、角色、機(jī)構(gòu)、權(quán)限等方面,以及該框架在Winform方面的應(yīng)用集成。
1、ABP框架的權(quán)限控制管理內(nèi)容
我們知道,權(quán)限管理一般都會(huì)涉及到用戶、組織機(jī)構(gòu)、角色,以及權(quán)限功能等方面的內(nèi)容,ABP框架的基礎(chǔ)內(nèi)容也是涉及到這幾方面的內(nèi)容,其中它們之間的關(guān)系基本上是多對(duì)多的關(guān)系,它們的關(guān)系如下所示。
不過在官網(wǎng)下載的框架里面,包含權(quán)限管理這些應(yīng)用服務(wù)層和展示層的內(nèi)容并不完整,只是簡(jiǎn)單的包括了用戶和角色的基礎(chǔ)管理,而且很多權(quán)限管理所需要的基礎(chǔ)功能并沒有提供。
根據(jù)ABP框架提供的基礎(chǔ)數(shù)據(jù)庫表,我們可以進(jìn)一步整理權(quán)限管理幾個(gè)重要概念和真實(shí)數(shù)據(jù)庫表之間的對(duì)應(yīng)關(guān)系,基于這個(gè)基礎(chǔ)上,我們可以完善整個(gè)權(quán)限管理模塊內(nèi)容。
上圖是ABP基礎(chǔ)框架中權(quán)限模塊里面包含的一些主對(duì)象表和中間表,中間表主要用來存儲(chǔ)兩個(gè)對(duì)象之間的多對(duì)多關(guān)系,如角色包含多個(gè)用戶,用戶屬于多個(gè)機(jī)構(gòu),機(jī)構(gòu)包含多個(gè)角色等等。
?
2、基于ABP框架的權(quán)限管理模塊
1)組織機(jī)構(gòu)管理?
組織機(jī)構(gòu)主要就是一個(gè)層級(jí)的對(duì)象關(guān)系,一般包含但不限于公司、部門、工作組等的定義,其中組織機(jī)構(gòu)包含用戶成員和角色成員的關(guān)系,如下界面所示。
組織機(jī)構(gòu)包含的成員可以添加多個(gè)人員記錄,添加界面如下所示。
添加角色界面如下所示。
?
?2)角色管理
角色信息沒有層級(jí)關(guān)系,可以通過列表展示。
其中角色包含權(quán)限分配和角色成員的維護(hù),如下是角色編輯界面,包含角色基本信息、權(quán)限、成員管理等。
角色的權(quán)限包含系統(tǒng)可以用的權(quán)限,并可以勾選為角色設(shè)置所需的功能點(diǎn),如下界面所示。
用戶成員則和機(jī)構(gòu)的用戶管理一樣,可以指定多個(gè)用戶。
3)用戶管理
用戶管理只需要管理用戶基本的信息即可,我們?nèi)绻枰峙浣巧梢栽诮巧芾砝锩娼y(tǒng)一處理。當(dāng)然,創(chuàng)建用戶的時(shí)候,也可以ABP框架的收費(fèi)版本界面一樣,為用戶指定角色和機(jī)構(gòu)信息。
我這里主要是維護(hù)用戶信息即可,用戶列表界面如下所示。
用戶編輯或者查看界面,除了可以看用戶基礎(chǔ)信息外,可以查看用戶包所屬的機(jī)構(gòu)(多個(gè)),或者所屬的角色(多個(gè))
當(dāng)然可以查看這個(gè)用戶本身擁有的權(quán)限功能點(diǎn),如下界面所示。
4)權(quán)限功能
?嚴(yán)格來說,ABP框架并沒有統(tǒng)一管理好權(quán)限功能點(diǎn)的,它沒有任何表來存儲(chǔ)這個(gè)功能集合,而是通過派生AuthorizationProvider的子類來定義權(quán)限功能點(diǎn),這種需要通過指定AuthorizationProvider的子類的方式創(chuàng)建功能點(diǎn),需要每次系統(tǒng)模塊增加功能點(diǎn)的時(shí)候,編碼一下,然后增加自己的功能點(diǎn),如下界面所示。
這種方式可能能夠滿足大多數(shù)的需要,不過我如果需要增量開發(fā),或者動(dòng)態(tài)增加某些功能點(diǎn)的時(shí)候,就有點(diǎn)不方便了。
我在這個(gè)基礎(chǔ)上引入了一個(gè)權(quán)限功能的表用來存儲(chǔ)功能點(diǎn)的,然后提供管理界面來動(dòng)態(tài)維護(hù)這些功能點(diǎn)。如下界面所示。
這樣我可以動(dòng)態(tài)添加或者批量添加所需要的功能點(diǎn),并且和整個(gè)權(quán)限管理模塊串聯(lián)起來,形成一個(gè)完整的控制體系。
?
這些概念主要還是來源于我的Winform開發(fā)框架和混合式開發(fā)框架里面的控制思路,以及界面展示的處理。
這樣我們就可以管理自己的權(quán)限功能點(diǎn),并可以為指定的角色配置相關(guān)的控制功能點(diǎn),如下表所示是角色的權(quán)限集合(系統(tǒng)中間表),也就是給角色分配的功能點(diǎn),依舊是在原來的系統(tǒng)表里面存儲(chǔ)。
?
3、權(quán)限控制在業(yè)務(wù)模塊界面中的使用
我們擁有了用戶、角色、機(jī)構(gòu)、權(quán)限功能以及它們之間的關(guān)系后,我們可以按照一個(gè)完善的權(quán)限系統(tǒng)來創(chuàng)建對(duì)應(yīng)的用戶角色權(quán)限關(guān)系,并通過在客戶端對(duì)界面權(quán)限的判斷和服務(wù)端對(duì)操作權(quán)限的判斷,實(shí)現(xiàn)完整的控制處理。
服務(wù)端由ABP框架內(nèi)置權(quán)限進(jìn)行管理,通過在AppService里面定義好增刪改查等權(quán)限點(diǎn),如引用服務(wù)層的基類設(shè)置了幾個(gè)權(quán)限點(diǎn)的屬性。
我們?cè)谧宇惱锩嬷付ㄟ@些操作的變量即可,如產(chǎn)品應(yīng)用服務(wù)中,我們可以定義CreatePermissionName為 Product/Add 這樣的名稱,當(dāng)然也可以自定義。
然后每次在Action中調(diào)用相應(yīng)的檢查即可,如下是對(duì)創(chuàng)建的判斷檢查。
或者更新操作的權(quán)限檢查
如果對(duì)于導(dǎo)入、導(dǎo)出等其他權(quán)限,我們則可以通過調(diào)用
void CheckPermission(string permissionName);來進(jìn)行自己自定義權(quán)限名稱的判斷。
在客戶端,我們登錄成功后,獲取用戶的權(quán)限集合,然后在客戶端進(jìn)行判斷即可進(jìn)行權(quán)限的控制管理,可以控制菜單、按鈕等界面元素,如下是整合了權(quán)限控制的產(chǎn)品信息管理界面。
分頁列表展示界面的控制代碼如下所示。
編輯或者查看界面的控制代碼如下所示
這樣我們 就可以整合了權(quán)限到業(yè)務(wù)管理模塊里面,實(shí)現(xiàn)對(duì)菜單、按鈕等元素的權(quán)限控制了。
首先在權(quán)限管理系統(tǒng)模塊里面為用戶角色添加對(duì)應(yīng)的產(chǎn)品管理權(quán)限點(diǎn)。
產(chǎn)品信息界面展示如下所示。
如果在權(quán)限模塊的角色里面取消對(duì)應(yīng)的功能點(diǎn),那么產(chǎn)品管理功能不可用。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wuhuacong/p/11065811.html
總結(jié)
以上是生活随笔為你收集整理的ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS学习之UIDatePicker控件
- 下一篇: nfs服务器工作原理