.NET Core實戰專案之CMS 第七章 設計篇-使用者許可權極簡設計全過程
寫在前面
這篇我們對使用者許可權進行極簡設計並保留其擴充套件性。首先很感謝大家的閱讀,前面六章我帶著大家快速入門了ASP.NET Core、ASP.NET Core的啟動過程原始碼解析及配置檔案的載入過程原始碼解析並引入依賴注入的概念、Git的快速入門、Dapper的快速入門、Vue的快速入門。不知道大夥掌握的怎麼樣了!如果你有興趣的話可以加入我們的.NET Core實戰專案群637326624跟更多的小夥伴共同進行交流下。
接下來我們就正式進入.NET Core實戰專案之CMS的設計篇了。在設計篇呢,我們需要對資料庫進行設計,而資料庫的設計又分為功能部分設計以及使用者許可權部分設計。作為設計篇的第一篇,我們先進行許可權部分的設計吧!希望對你進行許可權設計有所啟發。
本篇已經收錄至《 ofollow,noindex" target="_blank">.NET Core實戰專案之CMS 第一章 入門篇-開篇及總體規劃 》
作者:依樂祝
原文地址: https://www.cnblogs.com/yilezhu/p/10056094.html
需求分析
首先,做一個東西之前必須把需求搞清楚。網上關於許可權管理需求分析以及設計的文章也比較多,這裡把我們需要實現的這個簡單的CMS系統將要實現的許可權部分內容羅列如下:
由於水平有限,有設計不合理的地方還請給予指正,我會以迅雷不及掩耳之勢給以糾正,從而能夠正確的引導更多的人。
- 許可權資源
- 選單許可權:管理員跟內容編輯者登入系統所擁有的功能選單是不一樣的(先實現這塊)
- 按鈕許可權:管理員有文章稽核的功能,而內容編輯者沒有(文章稽核通過後才能進行釋出,最近聽群裡小夥伴說許可權控制如何控制到按鈕,這個後期會考慮加上)
- 資料許可權:內容編輯者A看不到內容編輯這B發表的文章,而管理員可以看到A跟B的文章(這個後期也會考慮加上)
-
欄位許可權:內容編輯者看不到文章的審批人是誰,而管理員能看到(這個後期也會考慮加上)
目前許可權部分第一版只實現選單許可權部分,後期會擴充套件到按鈕許可權,資料許可權以及欄位許可權!因為如果設計的太多的話對很多新手朋友可能很難消化,同時如果設計的太多的話反而增加系統的複雜性,影響後面課程的進度。
-
使用者
使用者是應用系統的具體操作者,我這裡設計的是不能把許可權直接分配給使用者,如果使用者想擁有某個許可權,必須先為這個使用者建立一個角色,然後給這個角色分配相應的許可權,從而間接的讓使用者擁有了系統的許可權(說的有點拗口,大夥將就著看吧)。當然國內的情況是總有些人比較特殊,這時候可以專門為這個人建立一個特殊的角色來解決問題。
-
角色
為了對許多擁有相似許可權的使用者進行分類管理,定義了角色的概念,以上所有的許可權資源都可以分配給角色,然後通過給使用者分配某個角色,從而達到給使用者分分配目的(就是為了解耦資源許可權和使用者)角色和使用者是N:N的關係。
設計
經過N次優化的資料庫結構設計。本來資料庫核心表中有很多多對多的關係(使用者與角色/角色與選單等),所以中間多了很多關聯關係表,後來想想覺得何苦呢,為什麼大夥都喜歡這樣的設計,所以為了簡化這個過程我進行了如下的設計:
這裡你可能會問我:所有多對多的關係都放在一張表裡面,怎麼保證效能呢?什麼?效能?沒有千萬級別的資料,別跟我談效能。如果你的系統幾十萬資料時都會很卡的話,還是乖乖的去惡補一下資料庫基礎吧。
資料庫設計我採用的是 PowerDesigner
,首先開啟軟體,新建一個概念模型。然後對這塊的設計如下:
上圖可能不清晰,所以下面我會對每個表進行詳細的說明。
表詳細說明
後臺管理員
後臺管理員顧名思義就是對我們的後臺進行管理的人。這裡考慮到後期擴充套件可能會用到會員系統(Users)因此這裡的後臺管理員表名使用Manager 。後臺管理員包含的資訊有:
主要資訊:主鍵,角色ID,是否鎖定
登入相關資訊:使用者名稱,密碼
個性化資訊:暱稱,頭像
聯絡方式資訊:手機號碼,郵箱地址
登入相關資訊:登入次數,最後一次登入IP,最後一次登入時間
操作相關資訊:新增人,新增時間,修改人,修改時間
其他資訊:是否刪除,備註
後臺管理員角色
這裡為了使後臺管理員與後臺選單進行解耦引入了角色的概念。一個後臺管理員想要具有某個選單的功能必須給它分配相應角色才能可以,角色又分為系統管理員和超級管理員。超級管理員的角色不能進行修改,擁有後臺的所有許可權。而系統管理員的功能則可以進行個性化的定製來滿足需求。
主要資訊:主鍵,角色型別(超級管理員以及系統管理員),角色名稱,是否系統預設(系統預設不能刪除,防止誤刪除)
操作相關資訊:新增人,新增時間,修改人,修改時間
其他 資訊:是否刪除,備註
後臺管理選單
後臺管理選單是後臺的功能導航。是具體功能的單位,當然每個後臺管理選單還包含相應的操作許可權,這塊我們後期再做具體操作的設計,前期為了考慮大部分人所以這裡暫不考慮,但是我已經預留了欄位,聰明如你,應該猜得到這是哪個欄位吧!
主要資訊:主鍵,父選單ID
個性化資訊:名稱,顯示名稱,圖示地址,連結地址,排序欄位,操作許可權(沒錯,保留欄位,為後期操作許可權做準備)
操作資訊:新增人,新增時間,修改人,修改時間
其他資訊:是否刪除
角色許可權表
用來設計角色許可權,由於目前只有選單許可權,後期可以在此表進行操作許可權,以及其他許可權的擴充套件:
主要資訊:主鍵,角色ID,選單ID
其他資訊:操作型別
操作日誌
顧名思義,就是對後臺管理員的各種操作進行簡要的記錄
主要資訊:主鍵,操作型別
操作資訊:操作人,操作時間,操作IP,操作人名稱
其他資訊:備註
總結
今天帶著大家進行使用者許可權模組的設計,通過再三的斟酌只保留了這五張表,所以保留下來的這五張表也都個個是精華。之前設計的時候想不通為什麼那麼熱衷於那麼多的多對多設計,這樣的極簡設計也別有一番風味,瞬間感覺整個世界都簡單了很多。如果又覺得我的設計不合理的話,還請大家在下面留言或者加我聯絡我吧!