第三章 搭建一個通用的權限管理系統


項目目標部署環境:CentOS 7+

項目技術點:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx

 開源地址:https://github.com/wmowm/nh.core

 

哈哈,這章其實跟.net core沒多大關系,為了后面方便講解.net core,我們就以這個功能作為切入點,這個功能點也是許多小伙伴期待的內容

權限,通俗的講,就是系統判定某個用戶是否能執行某個操作

我們先模擬一個業務場景:某上市公司,在多個區域控股多個集團,每個集團下又有多個子公司

分析1.這公司好大啊,至少也有千把號人吧,數據加載問題

分析2.職位肯定很多,而且會出現重合,比如子公司A與子公司B,它們的組織結構可能80%是相同的

分析3.單一職責,某個角色,在某個領域下,它只具備某些職能,不然后期就會混亂,到處跨職能

分析4.OOP思想,彼此之間解耦,因為這些操作可能是多人協作的,不可能卡在某個功能點一直等待

分析N.后面就靠園友補充了

這里引用幾個基礎表,我這里畫了原形圖,根據原型圖進行說明

用戶表

錄入用戶基礎信息,每個用戶都是一個獨立的對象

菜單表

創建一個菜單,權限組是一個配置文件,里面是所有的權限,我們根據菜單勾選它擁有哪些權限即可

 

角色表

創建一個角色,勾選菜單權限組的一些權限,這里的列表可以做的不用這么復雜,可以單獨加一個查看按鈕,查看某個角色的所有權限

 

組織機構表

 

這里也比較好理解,就是CRUD一個treeview,我們現在還沒有職位,所以就不進行職位的操作

 

職位表

這里CRUD職位表,當職位表有數據時,在組織機構表,可以掛載這些職位

前面介紹的這些表,都是可以獨立進行操作的,而且操作也非常簡單,我們現在需要把它們關聯起來,這里我會結合數據庫結構進行講解

1.組織機構 掛載/移除  職位

這里我們引入一張關系表,機構職位表(OrganizatioPosition)

 id    oid    pid

主鍵     機構id     職位id

1     1     1

2     1       2

3     2     1

4     2     2

------------------------------------------------------------------------------------

它們的關系  oid  一對一   pid

注意點1.掛載的時候,判斷職位是否存在

2.用戶授權

展開組織機構,點擊職位,會顯示兩個table,一個用戶跟角色,我們在這里為用戶授權角色

根據oid 與 pid 可以查詢到opid

這里我們引入一張關系表,職位用戶角色表(PositionUserRole)

 id    opid    uid    rid

主鍵      機構職位id  用戶id    角色id

1     1     1,2,3,4  1,2,3,4

2     2        5,6          1,2,3,4

3     3          11,111   1,2

------------------------------------------------------------------------------------

opid 與 uid  一對多

opid 與 rid  一對多

uid  與  rid  多對多

這里小伙伴可能要問到關於查詢的問題,比如想知道 uid=1 擁有哪些角色

用模糊查詢 uid like '1,' 或者 uid like ',1,' 這些比較通俗的手法實現

因為我ORM用的是NHibernate,所以查詢不用顧慮這些問題,我填充查詢器是這樣的

in (對象1,對象2)

注意點1.一個用戶只能擁有一個職位,如果該職位具有跨部門權限,可以給這個職位添加對應的角色

我們模擬一下登錄過程

用戶登錄     -->      獲取用戶對象    -->  查詢PositionUserRole表,[獲取到多個角色,獲取到opid]    -->       根據opid可以獲取到用戶的組織機構信息與職位信息

覺得對你有幫助的,可以去給我開源項目點個星星

開源地址:https://github.com/wmowm/nh.core


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM