.NET Core實戰項目之CMS 第七章 設計篇-用戶許可權極簡設計全過程

来源:https://www.cnblogs.com/yilezhu/archive/2018/12/02/10056094.html
-Advertisement-
Play Games

寫在前面 這篇我們對用戶許可權進行極簡設計並保留其擴展性。首先很感謝大家的閱讀,前面六章我帶著大家快速入門了ASP.NET Core、ASP.NET Core的啟動過程源碼解析及配置文件的載入過程源碼解析並引入依賴註入的概念、Git的快速入門、Dapper的快速入門、Vue的快速入門。不知道大伙掌握的 ...


寫在前面

這篇我們對用戶許可權進行極簡設計並保留其擴展性。首先很感謝大家的閱讀,前面六章我帶著大家快速入門了ASP.NET Core、ASP.NET Core的啟動過程源碼解析及配置文件的載入過程源碼解析並引入依賴註入的概念、Git的快速入門、Dapper的快速入門、Vue的快速入門。不知道大伙掌握的怎麼樣了!如果你有興趣的話可以加入我們的.NET Core實戰項目群637326624跟更多的小伙伴共同進行交流下。

接下來我們就正式進入.NET Core實戰項目之CMS的設計篇了。在設計篇呢,我們需要對資料庫進行設計,而資料庫的設計又分為功能部分設計以及用戶許可權部分設計。作為設計篇的第一篇,我們先進行許可權部分的設計吧!希望對你進行許可權設計有所啟發。

本篇已經收錄至《.NET Core實戰項目之CMS 第一章 入門篇-開篇及總體規劃

作者:依樂祝
原文地址:https://www.cnblogs.com/yilezhu/p/10056094.html

需求分析

首先,做一個東西之前必須把需求搞清楚。網上關於許可權管理需求分析以及設計的文章也比較多,這裡把我們需要實現的這個簡單的CMS系統將要實現的許可權部分內容羅列如下:

由於水平有限,有設計不合理的地方還請給予指正,我會以迅雷不及掩耳之勢給以糾正,從而能夠正確的引導更多的人。

  1. 許可權資源
    • 菜單許可權:管理員跟內容編輯者登錄系統所擁有的功能菜單是不一樣的(先實現這塊)
    • 按鈕許可權:管理員有文章審核的功能,而內容編輯者沒有(文章審核通過後才能進行發佈,最近聽群里小伙伴說許可權控制如何控制到按鈕,這個後期會考慮加上)
    • 數據許可權:內容編輯者A看不到內容編輯者B發表的文章,而管理員可以看到A跟B的文章(這個後期也會考慮加上)
    • 欄位許可權:內容編輯者看不到文章的審批人是誰,而管理員能看到(這個後期也會考慮加上,而且脫離業務的欄位許可權,有點耍流氓的感覺)

      目前許可權部分第一版只實現菜單許可權部分,後期會擴展到按鈕許可權,數據許可權以及欄位許可權!因為如果設計的太多的話對很多新手朋友可能很難消化,同時如果設計的太多的話反而增加系統的複雜性,影響後面課程的進度。

  2. 用戶
    用戶是應用系統的具體操作者,我這裡設計的是不能把許可權直接分配給用戶,如果用戶想擁有某個許可權,必須先為這個用戶創建一個角色,然後給這個角色分配相應的許可權,從而間接的讓用戶擁有了系統的許可權(說的有點拗口,大伙將就著看吧)。當然國內的情況是總有些人比較特殊,這時候可以專門為這個人創建一個特殊的角色來解決問題。

  3. 角色
    為了對許多擁有相似許可權的用戶進行分類管理,定義了角色的概念,以上所有的許可權資源都可以分配給角色,然後通過給用戶分配某個角色,從而達到給用戶分分配目的(就是為瞭解耦資源許可權和用戶)角色和用戶是N:N的關係。

設計

經過N次優化的資料庫結構設計。本來資料庫核心表中有很多多對多的關係(用戶與角色/角色與菜單等),所以中間多了很多關聯關係表,後來想想覺得何苦呢,為什麼大伙都喜歡這樣的設計,所以為了簡化這個過程我進行瞭如下的設計:

這裡你可能會問我:所有多對多的關係都放在一張表裡面,怎麼保證性能呢?什麼?性能?沒有千萬級別的數據,別跟我談性能。如果你的系統幾十萬數據時都會很卡的話,還是乖乖的去惡補一下資料庫基礎吧。

資料庫設計我採用的是PowerDesigner,首先打開軟體,新建一個概念模型。然後對這塊的設計如下:

1543760443427

上圖可能不清晰,所以下麵我會對每個表進行詳細的說明。

表詳細說明

後臺管理員

1543762193709

後臺管理員顧名思義就是對我們的後臺進行管理的人。這裡考慮到後期擴展可能會用到會員系統(Users)因此這裡的後臺管理員表名使用Manager 。後臺管理員包含的信息有:
主要信息:主鍵,角色ID,是否鎖定
登錄相關信息:用戶名,密碼
個性化信息:昵稱,頭像
聯繫方式信息:手機號碼,郵箱地址
登錄相關信息:登錄次數,最後一次登錄IP,最後一次登錄時間
操作相關信息:添加人,添加時間,修改人,修改時間
其他信息:是否刪除,備註

後臺管理員角色

1543762177148

這裡為了使後臺管理員與後臺菜單進行解耦引入了角色的概念。一個後臺管理員想要具有某個菜單的功能必須給它分配相應角色才能可以,角色又分為系統管理員和超級管理員。超級管理員的角色不能進行修改,擁有後臺的所有許可權。而系統管理員的功能則可以進行個性化的定製來滿足需求。

主要信息:主鍵,角色類型(超級管理員以及系統管理員),角色名稱,是否系統預設(系統預設不能刪除,防止誤刪除)
操作相關信息:添加人,添加時間,修改人,修改時間
其他 信息:是否刪除,備註

後臺管理菜單

1543762149541

後臺管理菜單是後臺的功能導航。是具體功能的單位,當然每個後臺管理菜單還包含相應的操作許可權,這塊我們後期再做具體操作的設計,前期為了考慮大部分人所以這裡暫不考慮,但是我已經預留了欄位,聰明如你,應該猜得到這是哪個欄位吧!
主要信息:主鍵,父菜單ID
個性化信息:名稱,顯示名稱,圖標地址,鏈接地址,排序欄位,操作許可權(沒錯,保留欄位,為後期操作許可權做準備)
操作信息:添加人,添加時間,修改人,修改時間
其他信息:是否刪除

角色許可權表

1543762126759

用來設計角色許可權,由於目前只有菜單許可權,後期可以在此表進行操作許可權,以及其他許可權的擴展:
主要信息:主鍵,角色ID,菜單ID
其他信息:操作類型

操作日誌

1543762102050

顧名思義,就是對後臺管理員的各種操作進行簡要的記錄
主要信息:主鍵,操作類型
操作信息:操作人,操作時間,操作IP,操作人名稱
其他信息:備註

總結

今天帶著大家進行用戶許可權模塊的設計,通過再三的斟酌只保留了這五張表,所以保留下來的這五張表也都個個是精華。之前設計的時候想不通為什麼那麼熱衷於那麼多的多對多設計,這樣的極簡設計也別有一番風味,瞬間感覺整個世界都簡單了很多。如果又覺得我的設計不合理的話,還請大家在下麵留言或者加我聯繫我吧!寫文章需要動力,希望大家給個推薦支持一下哈!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 用JavaPOI導出Excel時,我們會考慮到Excel版本及數據量的問題。針對不同的Excel版本,要採用不同的工具類。HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,擴展名是.xls;XSSFWorkbook:是操作Excel2007的版本,擴展名是.xlsx。用過... ...
  • 同步/非同步(描述網路通信模式,適用於請求 響應模型) 同步:發送方發送請求後,需要等待接收響應,結果占用並浪費了CPU資源 非同步:發送方發送請求後,不需要響應,可以繼續發送下一個請求,或者主動掛起線程並釋放CPU資源 阻塞/非阻塞(描述進程的函數方法調用方式) 阻塞:IO 調用會一直阻塞,直至調用結 ...
  • random 模塊 隨機:在某個範圍內取到每一個值的概率是相同的 練習:生成隨機驗證碼 # (1)4位數字的驗證碼 # 基礎版本 lis = '' for i in range(4): num = random.randint(0, 9) lis += str(num) print(lis) # 函 ...
  • 1.什麼是生成器 通過列表生成式,我們可以直接創建一個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,創建一個包含100萬個元素的列表,不僅占用很大的存儲空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。所以生成器就出現了,他彌補了直接生成大列表的不足,改成為定 ...
  • 案例 將一個 pdf 文件按要求分割為幾個部分。比如說一個pdf有20頁,分成5個pdf文件,每個pdf文件包含4頁。設計函數實現? Python代碼 函數講解 本函數是自己測試通過的函數,還有待優化。輸入參數有,將要分割的PDF文件,分割為幾個pdf文件,每個PDF文件頁數。 測試結果 原來只有一 ...
  • spring Aop的配置一定要配置在springmvc配置文件中 springMVC.xml1 <!-- AOP 註解方式 ;定義Aspect --> 2 <!-- 激活組件掃描功能,在包com.ly.aop.aspect及其子包下麵自動掃描通過註解配置的組件--> 3 <context:comp ...
  • 前言 領域驅動設計,其實已經是一個很古老的概念了,但它的複雜度依舊讓學習的人頭疼不已。 互聯網關於領域驅動的文章有很多,每一篇寫的都很好,理解領域驅動設計的人都看的懂。 不過,這些文章對於那些初學者而言,還是如同天書一樣。 買本驅動領域的書來看?別逗了,這可不是C#語法入門,哪裡有書能寫明白的。 想 ...
  • Nuget( "BagGet" )使用教程 1. 伺服器安裝ASP.NET Core 網上有很多教程,不多講,鏈接給你: "https://www.cnblogs.com/Agui520/p/8331499.html" 只需要安裝SDK和Runtime即可。安裝成功在命令視窗界面輸入命令“dotne ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...