項目目標部署環境: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