Demo地址:http://app.guoddy.com 源代碼地址:https://github.com/jellydong/LJDAPP 數據並不會真實保存,設定的為測試模式,所以免登錄。 ...
基於ASP.Net Core開發一套通用後臺框架
寫在前面
這是本人在學習的過程中搭建學習的框架,如果對你有所幫助那再好不過。如果您有發現錯誤,請告知我,我會第一時間修改。
知其然,知其所以然,並非重覆的造輪子。因為這段時間我發現,自己悶很久寫出來的代碼,再去看看別人的,會有種恍然大悟的感覺。不是只會用,而不知道為什麼要這樣用。
真的,只看不敲,總是學不會。
Demo地址:http://app.guoddy.com
源代碼地址:https://github.com/jellydong/LJDAPP
數據並不會真實保存,設定的為測試模式,所以免登錄。
開發工具
1.Visual Studio 2019
2.SQL Server 2017
3.Power Design
總體效果
主頁
菜單管理
)
角色管理及許可權配置
許可權設計&Why
我這裡主要涉及七個表,四個數據表,三個關聯表。
為什麼這樣設計,我覺得可能這是大多數系統的需求。
1.用戶和角色多對多,一個用戶可以擁有多個角色,不然設計角色就沒有了意義,實際可能一個人身兼數職。
2.可以直接給用戶授予或取消授予某個許可權。這個可能會有人覺得沒必要,所以如果不涉及這個,那就是五個表。但是我這裡保留,因為很多情況下,這是很正常的需求。
3.菜單可以無限級別,根據實際需求,修改系統配置參數。
詳細說明
ObjectID
、Remark
、Status
、CreatedBy
、CreatedTime
、ModifiedBy
、ModifiedTime
、Sort
是預設欄位。
SysUserInfo用戶表
- 如果用戶數據量大的話,實際這個表只需要保留
ObjectID
、ULoginName
、ULoginPWD
就可以了,這樣可以提高速度,沒必要把所有信息都保存起來。- 用戶和角色多對多 R_sysUserInfo_sysRole
- 用戶和許可權項多對多(直接授權或禁止) R_UserPermissions
Name | 說明 | 類型 | 主鍵 |
---|---|---|---|
ObjectID | 主鍵 | nvarchar(50) | TRUE |
ULoginName | 用戶名 | nvarchar(20) | |
ULoginPWD | 密碼 | nvarchar(50) | |
URealName | 真實姓名 | nvarchar(10) | |
UTelphone | 電話 | nvarchar(20) | |
UMobile | 手機號 | nvarchar(11) | |
UEmail | nvarchar(50) | ||
UQQ | nvarchar(20) | ||
UGender | 性別:0-女;1-男;2-保密 | int | |
UDepID | 所屬部門 | nvarchar(50) | |
Remark | 備註 | nvarchar(500) | |
Status | 狀態:0-啟用;1-禁用 | int | |
CreatedBy | 創建人 | nvarchar(50) | |
CreatedTime | 創建時間 | datetime | |
ModifiedBy | 修改人 | nvarchar(50) | |
ModifiedTime | 修改時間 | datetime | |
Sort | 排序值 | int |
SysRole角色表
- 對角色的分類,比如管理員、普通用戶等。
- 角色用戶多對多 R_sysUserInfo_sysRole
- 角色許可權多對多 R_RolePermission
Name | 說明 | 類型 | 主鍵 |
---|---|---|---|
ObjectID | 主鍵 | nvarchar(50) | TRUE |
RName | 角色名稱 | varchar(50) | |
Remark | 備註 | nvarchar(500) | |
Status | 狀態:0-啟用;1-禁用 | int | |
CreatedBy | 創建人 | nvarchar(50) | |
CreatedTime | 創建時間 | datetime | |
ModifiedBy | 修改人 | nvarchar(50) | |
ModifiedTime | 修改時間 | datetime | |
Sort | 排序值 | int |
SysMenus菜單表
- 菜單表 是一開始設計好後,改動最多的一個表。後續在開發過程中增加了
IsLast
、Hierarchy
;去除了MAction
- IsLast用來標記是不是最後一級,如果是最後一級我們給自動增加增刪改等預設方法。
- Hierarchy用來標記層級,前面我們說可以做到無限極,但是通常情況下會是三級,所以這個需要根據實際設定系統參數,維護的時候檢查限制即可。
- IsMenuShow是否作為菜單顯示,也就是左側菜單遞歸的,因為有部分API不需要作為菜單顯示,並且授權的方式也會不一樣。
- 菜單角色多對多 R_RolePermission
- 菜單許可權項一對多
Name | 說明 | 類型 | 主鍵 |
---|---|---|---|
ObjectID | 主鍵 | nvarchar(50) | TRUE |
MName | 名稱 | nvarchar(100) | |
MUrl | URL | nvarchar(100) | |
MArea | 區域 | nvarchar(100) | |
MController | 控制器 | nvarchar(100) | |
MIcon | 圖標 | nvarchar(100) | |
IsLast | 是不是最後一級菜單:0-是;1-否 | int | |
IsMenuShow | 是不是作為菜單顯示:0-是;1-否 | int | |
Remark | 備註 | nvarchar(500) | |
ParentID | 父ID | nvarchar(50) | |
Status | 狀態:0-啟用;1-禁用 | int | |
Hierarchy | 層級 | int | |
CreatedBy | 創建人 | nvarchar(50) | |
CreatedTime | 創建時間 | datetime | |
ModifiedBy | 修改人 | nvarchar(50) | |
ModifiedTime | 修改時間 | datetime | |
Sort | 排序值 | int |
SysFunction 菜單按鈕表 (菜單許可權項表)
- SysFunction一開始我是叫菜單按鈕表的,我計劃是查詢、新增編輯刪除、其他許可權這樣控制,但後來發現這樣不好,所以全都分開,每個方法都要記錄。當然為了方便,通用的方法,在增加菜單的時候會自動添加上。
- 菜單許可權項菜單是多對一關係
Name | 說明 | 類型 | 主鍵 |
---|---|---|---|
ObjectID | 主鍵 | nvarchar(50) | TRUE |
FName | 名稱 | nvarchar(50) | |
FFunction | 方法 | nvarchar(50) | |
FIcon | 圖標 | nvarchar(50) | |
ParentID | 所屬菜單 | nvarchar(50) | |
Remark | 備註 | nvarchar(500) | |
Status | 狀態:0-啟用;1-禁用 | int | |
CreatedBy | 創建人 | nvarchar(50) | |
CreatedTime | 創建時間 | datetime | |
ModifiedBy | 修改人 | nvarchar(50) | |
ModifiedTime | 修改時間 | datetime | |
Sort | 排序值 | int |
R_sysUserInfo_sysRole用戶和角色關聯表,記錄用戶和角色的對應關係。
R_RolePermission 角色菜單許可權項關聯表。
比如一個角色有用某菜單下的查詢和刪除許可權,那麼這個表應該是具有兩條記錄的。
R_UserPermissions 用戶菜單許可權項關聯表。
HavePermission
記錄該用戶是 是否有許可權:0-無許可權;1-有許可權
後續處理的時候,要從獲取的許可權記錄中排除直接無許可權的記錄,增加有許可權的。
總結
其實網上很多關於許可權的文章,之前自己再看的時候,總是覺得迷迷糊糊,所以最後打算自己動手做。到做完的時候,才有所理解。我也不知道我這裡敘述的是不是不清楚或者設計的是否合理,如果您覺得有問題,請告知我,我會立即改正!
切勿眼高手低,動手敲,像Power Design我也是第一次用,也是第一次用MarkDown寫博客。
此框架可以快速搭建應用,T4模板生成代碼,適合學習使用。如有問題,請與我聯繫
Demo地址:http://app.guoddy.com
源代碼地址:https://github.com/jellydong/LJDAPP
數據並不會真實保存,設定的為測試模式,所以免登錄。