項目目標部署環境:CentOS 7+mysql
項目技術點:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginxnginx
開源地址:https://github.com/wmowm/nh.coregit
哈哈,這章其實跟.net core沒多大關係,爲了後面方便講解.net core,咱們就以這個功能做爲切入點,這個功能點也是許多小夥伴期待的內容github
權限,通俗的講,就是系統斷定某個用戶是否能執行某個操做web
咱們先模擬一個業務場景:某上市公司,在多個區域控股多個集團,每一個集團下又有多個子公司sql
分析1.這公司好大啊,至少也有千把號人吧,數據加載問題數據庫
分析2.職位確定不少,並且會出現重合,好比子公司A與子公司B,它們的組織結構可能80%是相同的ui
分析3.單一職責,某個角色,在某個領域下,它只具有某些職能,否則後期就會混亂,處處跨職能.net
分析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