主頁 > .NET開發 > NetCore3.1及Vue開發通用RBAC前后端通用框架

NetCore3.1及Vue開發通用RBAC前后端通用框架

2021-06-09 14:34:35 .NET開發

目錄
  • 框架說明
  • 專案框架圖
  • 多租戶權限設計表
  • 效果圖
  • 后端拉取運行
  • 前端專案請參考 前端系列
  • 發布到docker中
  • netcore3.1 發布到docker中所遇到的坑及解決


框架說明

該框架是本人學習程序中本著只有自己動手操作一遍才能真正理解,和遇到對應問題并解決問題的思路,和為了能在開發相應系統時能快速搭建出相關框架而做出的基于NetCore3.1+Vue的RBAC通用權限框架,

只有在敲的程序中才能遇見細節上的問題,成長無非就是發現問題、思考問題、解決問題、總結沉淀,后面才能去規避和提高代碼質量,

如有發現什么錯誤,請聯系我,將第一時間改正,互相學習,共同進步,

不要只光看,最終要的是要自己敲,不自己敲的話,當遇到了還是不會、一臉懵的!

前端測驗地址 lion.levy.net.cn , 可以自己注冊,也可使用已有賬號密碼登錄,請不要用已有賬號修改或洗掉系統已有資料,謝謝配合
前端代碼地址 Gitee GitHub
后端介面地址 lion.levy.net.cn
后端代碼地址 Gitee GitHub

** 如果您覺得對您有幫助的話,可以給個start,謝謝 **

專案框架圖

EntityFrameworkCore CodeFirist開發 支持 MySql/SqlServer
資料遷移時自動生成種子資料,Quartz 表結構還請自行通過docs檔案中對應資料庫型別檔案,執行添加表陳述句
異步 async/await 開發
采用類似倉儲模式開發,封裝底層常用資料庫方法
Nlog日志記錄,可記錄請求日志/例外日志等,除錯階段列印SQL陳述句
支持AOP切面編程,如日志、快取、事務處理等
權限管理系統支持多租戶多權限管理,頁面動態管理頁面&按鈕權限
采用自定義JWT身份認證,可自帶引數,驗證過期時間,滑動無感重新頒發Token
支持Redis 和 Memory 兩種快取
使用三方DI AutoFac,實行批量注冊,支持屬性注入
采用Automapper做物件映射,并支持擴展方法直接映射,
使用 Quartz.net做任務調度,支持集群調度(未測驗該情況,代碼中有注釋說明),支持反射呼叫本地程式集方式,支持呼叫API方式
使用Swagger提供API檔案,并實作介面檔案中填寫授權資訊方便除錯,
支持CORS跨域,當前使用的是全跨域模式,
支持監控心跳檢查HealthChecks,可實作對其它網頁或服務的檢查和通知,(代碼沒寫,如需要,可聯系我獲取,通知支持釘釘和企業微信等)
支持RabbitMq訊息佇列,實作了死信佇列和延遲佇列,
支持docker部署,支持docker中部署同一網段
可配合Jenkins加 Sonar 做CI/CD & 代碼質量檢查
Nginx可配置實作負載均衡
可配置 IpRateLimiting 做API限流處理(此前配置試過,沒有起到效果,可能哪個地方沖突了),若需要,也可根據redis實作一個簡易版的

多租戶權限設計表

詳細說明
Deleted、CreatedTime、CreatedBy、UpdatedTime、UpdatedBy 為常用表默認欄位,可自行擴展增加Remark、Status、Sort等為表通用欄位,特別說明,若資料量很大的表,可將非關鍵欄位拆分出來,減小表大小,提高查詢速度,

  • 資料都是按頁存在,頁存盤空間有限,將非關鍵資訊存另外的一個表,關鍵資訊表所存資料頁就少,查詢速度就相應的提高了, 個人理解

Sys_Tenant租戶表

  • 租戶相當于是將系統租給某個公司使用,租戶表管理公司企業資訊,這里表結構只是給了一個示例,
  • 若有什么想要控制,就設計成相應的表,若資料資源固定則設計為字典表,
欄位名 說明 型別 主鍵
TenantId 主鍵 bigint TRUE
TenantName 租戶名稱 nvarchar(50)
Remark 備注 nvarchar(32)
State 狀態:1-啟用;-1-禁用 int
CreatedTime 創建時間 datetime

sys_user用戶表

欄位名 說明 型別 主鍵
UserId 主鍵 bigint TRUE
TenantId 租戶ID bigint
NickName 用戶名 nvarchar(30)
PassWord 密碼 nvarchar(512)
Email Email nvarchar(128)
Sex 性別:0-女;1-男 int
State 狀態:1-啟用;-1-禁用 int
CreatedTime 創建時間 datetime
CreatedBy 創建人 bigint
UpdatedTime 修改時間 datetime
UpdatedBy 修改人 bigint

Sys_Role角色表

欄位名 說明 型別 主鍵
RoleId 主鍵 bigint TRUE
TenantId 租戶ID bigint
RoleName 角色名稱 nvarchar(25)
RoleDesc 角色描述 nvarchar(128)
Deleted 邏輯洗掉標志 tinyint
CreatedTime 創建時間 datetime
CreatedBy 創建人 bigint
UpdatedTime 修改時間 datetime
UpdatedBy 修改人 bigint

Sys_User_Role_Relation用戶角色關系表

欄位名 說明 型別 主鍵
UserId 用戶ID bigint TRUE
RoleId 角色Id bigint TRUE
TenantId 租戶ID bigint TRUE
State 狀態:1-啟用;-1-禁用 int
Deleted 邏輯洗掉標志 tinyint
CreatedTime 創建時間 datetime
CreatedBy 創建人 bigint
UpdatedTime 修改時間 datetime
UpdatedBy 修改人 bigint

Sys_Menu權限資源表

欄位名 說明 型別 主鍵
MenuId 主鍵,自定義 nvarchar(40) TRUE
MenuName 資源名稱 nvarchar(64)
ParentMenuId 父級Id--無限級選單(長度加大) nvarchar(40)
Level 選單層級 int
Url 資源地址 nvarchar(256)
Type 資源型別:1:選單 2:按鈕 int
Icon 圖示 nvarchar(128)
OrderIndex 順序 int
Deleted 邏輯洗掉標志 tinyint
CreatedTime 創建時間 datetime
CreatedBy 創建人 bigint
UpdatedTime 修改時間 datetime
UpdatedBy 修改人 bigint

Sys_Role_Menu_Relation角色資源關系表

欄位名 說明 型別 主鍵
MenuId 資源ID nvarchar(40) TRUE
RoleId 角色Id bigint TRUE
TenantId 租戶ID bigint TRUE
State 狀態:1-啟用;-1-禁用 int
Deleted 邏輯洗掉標志 tinyint
CreatedTime 創建時間 datetime
CreatedBy 創建人 bigint
UpdatedTime 修改時間 datetime
UpdatedBy 修改人 bigint
  • 調度相關-額外創建的管理表

Sys_Quartz調度任務綜合表

欄位名 說明 型別 主鍵
JobGroup 任務分組 nvarchar(200) TRUE
JobName 任務名稱 nvarchar(200) TRUE
JobType 任務型別:0-無,1-api,2-程式集 int
BeginTime 開始時間 datetime
EndTime 結束時間 datetime
Cron Cron運算式 nvarchar(40)
RunTimes 執行次數 int
IntervalSecond 回圈次數 int
TriggerType 任務型別:0-無,1-cron,2-簡單型別 int
RequestPath API地址或請求類程式集名稱 nvarchar(56)
RequestMethod API請求型別或請求類地址 nvarchar(40)
RequestParameters 請求Body引數 nvarchar(512)
Headers 請求頭引數 nvarchar(256)
Priority 執行優先級,等級越高,相同時間先執行 int
Description 任務描述 nvarchar(256)
NotifyEmail 通知郵箱 nvarchar(128)
MailMessage 郵件通知型別:0-不通知,1-錯誤通知,2-全量通知 int
TriggerState 暫停 錯誤 阻塞 完成 等 int
PreviousFireTime 上次執行時間 datetime
NextFireTime 下次執行時間 datetime
CreatedTime 創建時間 datetime

效果圖

當用戶注冊使用,便是一個租戶,租戶也就代表是一個公司群體,可以以該賬號創建子賬號,給子賬號分配頁面及按鈕權限,

介面檔案

用戶界面

角色管理界面

系統管理選單界面

調度任務界面

調度-介面及cron界面

調度-程式集反射方式創建界面

調度日志界面

后端拉取運行

  • 需配置appsettings.json中的相關資訊 配置郵箱發送人資訊,本專案配置的是QQ郵箱,請根據需要配置,用以注冊和找回密碼的短信發送

  • 需配置appsettings.json中的相關資訊 配置資料庫鏈接資訊,執行資料庫遷移命令(查看第7點),執行完成后,根據doc檔案中選擇Quartz對應資料庫腳本語言創建相關表,

  • 配置NLog.config檔案資料庫相關資訊,用于記錄日志,根據使用資料庫選擇相應鏈接,并配置資料庫鏈接

  • 需配置appsettings.json中的相關資訊 Redis鏈接資訊

  • 需配置appsettings.json中的相關資訊 RabbitMQ鏈接資訊

  • 需配置appsettings.json中的相關資訊 Redis鏈接資訊

  • LionFrame.Data專案中有個種子資料檔案夾,在資料遷移時會添加相關資訊

前端專案請參考 前端系列

在博客中之前已經寫過前端系列,可參考下,有不清楚的地方可在個人簡介中找到我的聯系方式,若有什么錯誤的地方也歡迎指正~

發布到docker中

可參考專案中的docs檔案夾下的 同一網路部署到Docker中 檔案,因為我這邊redis和mysql已經在之前就已經創建過了,所以此次只做了 MQ和專案發布到同一網段中,其它的可如法炮制,喜歡玩的也可以使用docker-compose來進行撰寫第一次的發布腳本,因為多環境的問題,建議使用docker-compose,可快速的進行部署,也可避免命令敲錯等情況,

只有初次發布時配置可能比較麻煩,后面基本就只有專案需要多次發布,可引入jenkins 做 CI/CD,基本支持中小企業使用

若專案做的比較大可升級K8S,做彈性伸縮,nginx做負載均衡等等、

前端專案這里由于是騰訊云的學生服務器,比較卡頓,故申請了一個騰訊云的免費6個月的存盤桶COS進行發布前端專案,

netcore3.1 發布到docker中所遇到的坑及解決

由于docker中沒有圖片的依賴組件,在我們生成二維碼的時候的時候需要使用到System.Drawing.Common 來使用 Image、Bitmap 等型別,通過docker logs 可查看到如下例外

System.TypeInitializationException: The type initializer for 'Gdip' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'libgdiplus': The specified module could not be found.

解決方法,在dockerfile中加上如下陳述句RUN apt-get update && apt-get install -y libgdiplus

由于國內網路原因,此處可能需要下載數十分鐘,為了提高資料,可在dockerfile中加上RUN cp sources.list /etc/apt/一句話,使用鏡像源,來提高下載速度,sources.list檔案在docs檔案夾中有提供,

這樣就能解決圖片的問題

ps:小插曲,其實最開始我在這樣處理后還是不能生成圖片、日志中也看不到錯誤,只知道容器在呼叫二維碼生成介面時就會退出,起先還以為是dockerfile引入有問題,
在各大網站查找相關訊息,博客園/csdn/stackoverflow/github等網站上查找,
在這個網址上 https://github.com/dotnet/dotnet-docker/issues/618 看到人家都是這樣解決的,為啥我就不行
不禁陷入了沉思,突然想到可能是代碼的問題,換了生成驗證碼的方式, 驚奇的發現可以了,有的時候得換一種思考的方式,

原文地址

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/285361.html

標籤:.NET Core

上一篇:.net web core 如何編碼實作檔案上傳功能

下一篇:.Net Core 3.x Api開發筆記 -- Swagger(七)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more