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

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

相關文章
相關標籤/搜索