在前面兩篇隨筆《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ù)庫(kù)表街图,我們可以進(jìn)一步整理權(quán)限管理幾個(gè)重要概念和真實(shí)數(shù)據(jù)庫(kù)表之間的對(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è)用戶本身?yè)碛械臋?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)用
<pre style="margin: 0px 0px 0px 22px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px !important; font-family: "Courier New" !important;">void CheckPermission(string permissionName);</pre>
來進(jìn)行自己自定義權(quán)限名稱的判斷惯悠。
在客戶端邻邮,我們登錄成功后,獲取用戶的權(quán)限集合克婶,然后在客戶端進(jìn)行判斷即可進(jìn)行權(quán)限的控制管理筒严,可以控制菜單、按鈕等界面元素情萤,如下是整合了權(quán)限控制的產(chǎn)品信息管理界面鸭蛙。
分頁(yè)列表展示界面的控制代碼如下所示。
編輯或者查看界面的控制代碼如下所示
這樣我們 就可以整合了權(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)品管理功能不可用勋陪。