免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實戰(zhàn)洞察。

Winform用戶權(quán)限模塊設(shè)計:RBAC模型與Dapper實踐

Winform用戶權(quán)限模塊設(shè)計:RBAC模型與Dapper實踐 簡介面向C# Winform開發(fā)者的用戶管理功能完整示例以MySQL為數(shù)據(jù)底座覆蓋用戶創(chuàng)建、角色創(chuàng)建、用戶日志記錄、操作權(quán)限設(shè)置四大模塊適合課程設(shè)計或企業(yè)后臺賬號體系開發(fā)時初學(xué)與參考。壓縮包共49個文件、約957KB以.cs源碼、.resx窗體資源、.sln/.csproj項目配置為主體另附可運(yùn)行exe、依賴dll以及.sql數(shù)據(jù)庫腳本打開解決方案即可運(yùn)行調(diào)試適合通過實例理解項目結(jié)構(gòu)。工程內(nèi)包含DalMySQL、DbExtension、Bll等分層數(shù)據(jù)訪問與業(yè)務(wù)處理代碼以及用戶注冊、登錄、角色分配、權(quán)限校驗、日志記錄等窗體邏輯數(shù)據(jù)庫腳本提供用戶表、角色表、權(quán)限表及關(guān)聯(lián)表的建表語句可直觀學(xué)習(xí)ADO.NET連接MySQL、密碼加密存儲、RBAC權(quán)限檢查等落地寫法。已有374人學(xué)習(xí)下載對想快速掌握WinformMySQL用戶權(quán)限管理寫法的開發(fā)者具有較高參考價值也可為后續(xù)擴(kuò)展操作審計、菜單權(quán)限等功能提供基礎(chǔ)。1. 用戶模塊看著簡單為什么Winform項目里最容易返工做過內(nèi)部管理系統(tǒng)、MES上位機(jī)的Winform開發(fā)者應(yīng)該都有同感用戶創(chuàng)建、角色分配、操作權(quán)限設(shè)置這些功能單看每個都不難但湊到一起就成了返工重災(zāi)區(qū)。原因在于需求總在變——上線第一版只要一個登錄框第二版客戶就要分管理員和操作員第三版又要求“操作員不能導(dǎo)出數(shù)據(jù)”“這個按鈕只有主管能點”這時候才發(fā)現(xiàn)權(quán)限判斷早散落在每個按鈕的點擊事件里改一處漏三處。這篇筆記就是圍繞C# Winform里的用戶、角色、日志、操作權(quán)限這套完整模塊講怎么用數(shù)據(jù)庫把模型一次搭對再用Dapper把用戶創(chuàng)建、角色綁定、權(quán)限加載、日志記錄串成一條可靠鏈路。適合正在做Winform項目案例、準(zhǔn)備給系統(tǒng)加賬號體系的開發(fā)者也適合給學(xué)校數(shù)據(jù)庫課程設(shè)計做參考。2. 先定數(shù)據(jù)模型用戶、角色、權(quán)限、日志五張表怎么設(shè)計2.1 五張表的分工為什么用戶不直接掛權(quán)限常見做法是采用RBAC模型用戶不直接和權(quán)限掛鉤而是通過“用戶-角色-權(quán)限”三層結(jié)構(gòu)來管理。這樣設(shè)計的直接好處是給三個新用戶分配權(quán)限時不用分別勾選十幾個權(quán)限項只要把他們都掛到“操作員”角色上即可。角色是權(quán)限的集合用戶是角色的成員權(quán)限變更只需要動角色。整個模塊需要五張核心表SysUser用戶表存賬號、密碼哈希、鹽、狀態(tài)、創(chuàng)建時間、最后登錄時間。SysRole角色表存角色名、角色編碼、備注。SysUserRole用戶和角色的關(guān)聯(lián)表一個用戶掛多個角色一個角色被多個用戶使用。SysPermission權(quán)限表存權(quán)限編碼、權(quán)限名稱、所屬分組。SysRolePermission角色和權(quán)限的關(guān)聯(lián)表決定“這個角色能做什么”。再加上一張SysLog日志表記錄誰在什么時間做了什么操作。六張表構(gòu)成了整個權(quán)限體系的地基。我見過有人圖省事在用戶表里加一個“權(quán)限字符串”字段把權(quán)限寫成“1,3,8,12”也有人用一張用戶表外加一張日志表就開工。短期跑得通一旦出現(xiàn)“所有主管都要增加導(dǎo)出數(shù)據(jù)權(quán)限”這種需求用角色表只需要改一處角色權(quán)限關(guān)聯(lián)用權(quán)限字符串就得逐個用戶改過去改完還得擔(dān)心誰漏了。所以在這個標(biāo)題的場景下五張表再加一張日志表是性價比最高的結(jié)構(gòu)。2.2 建庫腳本和初始化數(shù)據(jù)角色、權(quán)限碼一次配齊以SQL Server為例建表腳本如下。如果項目用MySQL把IDENTITY換成AUTO_INCREMENT、GETDATE換成NOW、NVARCHAR換成VARCHAR即可邏輯不變。CREATE TABLE SysUser ( UserId INT IDENTITY(1,1) PRIMARY KEY, UserName NVARCHAR(50) NOT NULL, PasswordHash NVARCHAR(128) NOT NULL, Salt NVARCHAR(32) NOT NULL, DisplayName NVARCHAR(50) NULL, IsEnabled BIT NOT NULL DEFAULT 1, CreateTime DATETIME NOT NULL DEFAULT GETDATE(), LastLoginTime DATETIME NULL ); CREATE TABLE SysRole ( RoleId INT IDENTITY(1,1) PRIMARY KEY, RoleName NVARCHAR(50) NOT NULL, RoleCode NVARCHAR(50) NOT NULL ); CREATE TABLE SysUserRole ( UserId INT NOT NULL, RoleId INT NOT NULL ); CREATE TABLE SysPermission ( PermissionId INT IDENTITY(1,1) PRIMARY KEY, PermissionCode NVARCHAR(50) NOT NULL, PermissionName NVARCHAR(50) NOT NULL, Category NVARCHAR(50) NULL ); CREATE TABLE SysRolePermission ( RoleId INT NOT NULL, PermissionId INT NOT NULL ); CREATE TABLE SysLog ( LogId BIGINT IDENTITY(1,1) PRIMARY KEY, UserId INT NULL, UserName NVARCHAR(50) NULL, ActionType NVARCHAR(50) NULL, Detail NVARCHAR(500) NULL, IpAddress NVARCHAR(50) NULL, CreateTime DATETIME NOT NULL DEFAULT GETDATE() );權(quán)限表里用PermissionCode作為業(yè)務(wù)判斷依據(jù)是個關(guān)鍵設(shè)計。比如“UserManage”“RoleManage”“DataImport”“DataExport”這些編碼在C#代碼里以字符串常量存在權(quán)限判斷時比較的是可讀的編碼而不是數(shù)字ID。這樣看代碼能看到含義排查問題時也能直接對上號。初始化數(shù)據(jù)時把管理員角色和常用權(quán)限一次性寫入INSERT INTO SysRole (RoleName, RoleCode) VALUES (N管理員, NAdmin); INSERT INTO SysRole (RoleName, RoleCode) VALUES (N操作員, NOperator); INSERT INTO SysPermission (PermissionCode, PermissionName, Category) VALUES (NUserManage, N用戶管理, N系統(tǒng)管理), (NRoleManage, N角色管理, N系統(tǒng)管理), (NDataImport, N數(shù)據(jù)導(dǎo)入, N業(yè)務(wù)操作), (NDataExport, N數(shù)據(jù)導(dǎo)出, N業(yè)務(wù)操作), (NLogView, N日志查看, N系統(tǒng)管理); -- 管理員擁有全部權(quán)限 INSERT INTO SysRolePermission (RoleId, PermissionId) SELECT 1, PermissionId FROM SysPermission; -- 操作員只擁有數(shù)據(jù)導(dǎo)入和導(dǎo)出 INSERT INTO SysRolePermission (RoleId, PermissionId) SELECT 2, PermissionId FROM SysPermission WHERE PermissionCode IN (NDataImport, NDataExport);這段腳本有兩個取舍要說明。第一沒有給關(guān)聯(lián)表設(shè)置物理外鍵只靠程序保證數(shù)據(jù)完整性。Winform內(nèi)部系統(tǒng)一般并發(fā)不高去掉物理外鍵可以避免刪除角色時被外鍵攔住、操作順序受限。如果團(tuán)隊規(guī)范允許可以加上外鍵求穩(wěn)。第二權(quán)限碼用NVARCHAR而非整數(shù)ID是我做權(quán)限系統(tǒng)的習(xí)慣具體原因在4.3節(jié)展開。2.3 索引與連接串SQL Server、MySQL、SQLite怎么快速切換表建好后索引是登錄查詢快不快的前提。實際工作中最需要保證的是三條SysUser.UserName唯一索引登錄時按用戶名查用戶SysUserRole.RoleId索引加載用戶角色時按用戶ID反查SysRolePermission.RoleId索引加載角色權(quán)限時聯(lián)動查詢。CREATE UNIQUE INDEX UX_SysUser_UserName ON SysUser(UserName); CREATE INDEX IX_SysUserRole_RoleId ON SysUserRole(RoleId); CREATE INDEX IX_SysRolePermission_RoleId ON SysRolePermission(RoleId);數(shù)據(jù)庫的選型會影響連接串和分頁寫法但表結(jié)構(gòu)可以保持一致。開發(fā)階段我用SQLite或LocalDB提速部署時再切到SQL Server連接串可以用配置項區(qū)分。SqlConnection本身就帶連接池程序里每次new出來的連接關(guān)閉后回到池里復(fù)用不要在循環(huán)里頻繁打開關(guān)閉同一個連接否則連接池耗盡后會出現(xiàn)“連接超時”的玄學(xué)問題。這是Winform連數(shù)據(jù)庫最常見的隱性坑后面避坑章再細(xì)說。3. 用戶創(chuàng)建與角色分配用Dapper把新增和授權(quán)寫進(jìn)一個事務(wù)3.1 用戶創(chuàng)建窗口從界面到數(shù)據(jù)庫的完整鏈路用戶創(chuàng)建的需求拆開看只有兩步往SysUser插一條用戶記錄往SysUserRole插若干條關(guān)聯(lián)記錄。但“若干條”和“一條”必須同時成功或同時失敗。比如創(chuàng)建用戶成功、分配角色失敗程序里會出現(xiàn)一個沒有角色的賬號登錄后什么都做不了這種數(shù)據(jù)在排錯時極難發(fā)現(xiàn)。常見做法是在新增用戶窗體里上方放用戶名、密碼、確認(rèn)密碼、顯示名下方放一個CheckedListBox展示所有角色點擊保存后一次提交。界面布局不是重點重點是數(shù)據(jù)鏈路。我一般用Dapper替代原來的DataSet和SqlCommand手寫參數(shù)原因很實際Dapper擴(kuò)展方法簡單SQL可控性能開銷極小團(tuán)隊里任何人接手都能看懂。密碼不能明文入庫入庫的是“鹽”和“哈希值”。鹽是每次生成的一串隨機(jī)字節(jié)轉(zhuǎn)Hex哈希用PBKDF2或SHA256計算。注意一件事同一個用戶登錄時必須用同一個鹽去重新計算哈希所以鹽必須單獨(dú)存一列不能只存一個哈希值。3.2 用Dapper把用戶和角色寫進(jìn)同一個事務(wù)下面是核心代碼。為了聚焦業(yè)務(wù)邏輯省略了控件取值部分但從方法簽名能看出入?yún)⒑统鰠?。public bool CreateUserWithRoles(string userName, string password, string displayName, Listint roleIds) { // 1. 生成鹽和密碼哈希 string salt PasswordHelper.GenerateSalt(); string passwordHash PasswordHelper.HashPassword(password, salt); // 2. 插入用戶拿到自增主鍵 const string sqlUser INSERT INTO SysUser (UserName, PasswordHash, Salt, DisplayName, IsEnabled, CreateTime) VALUES (UserName, PasswordHash, Salt, DisplayName, 1, GETDATE()); SELECT CAST(SCOPE_IDENTITY() AS INT);; // 3. 插入用戶角色關(guān)聯(lián) const string sqlRole INSERT INTO SysUserRole (UserId, RoleId) VALUES (UserId, RoleId);; using (var conn new SqlConnection(_connectionString)) { conn.Open(); using (var tx conn.BeginTransaction()) { try { int newUserId conn.ExecuteScalarint(sqlUser, new { UserName userName, PasswordHash passwordHash, Salt salt, DisplayName displayName }, tx); foreach (int roleId in roleIds) { conn.Execute(sqlRole, new { UserId newUserId, RoleId roleId }, tx); } tx.Commit(); return true; } catch (Exception ex) { tx.Rollback(); Logger.Error(CreateUserWithRoles failed, ex); return false; } } } }參數(shù)說明Dapper的匿名對象參數(shù)名和SQL里的參數(shù)名必須一一對應(yīng)ExecuteScalar 用來拿自增主鍵SQL Server里是SCOPE_IDENTITY而不是IDENTITY。事務(wù)是這里的主角。把Insert用戶和Insert角色放進(jìn)同一個BeginTransaction要么全提交要么全回滾。我在實際項目里見過有人分開調(diào)用兩個方法執(zhí)行兩條SQL結(jié)果用戶創(chuàng)建成功、角色分配失敗最后靠手工寫腳本補(bǔ)數(shù)據(jù)才恢復(fù)。有了事務(wù)這類事故從根上斷了。PasswordHelper的生成邏輯也值得展開GenerateSalt用RNGCryptoServiceProvider生成16字節(jié)隨機(jī)數(shù)轉(zhuǎn)Hex長度32位HashPassword用Rfc2898DeriveBytes迭代10000次輸出128位十六進(jìn)制字符串。不要用MD5也不要只用一次SHA256理由在5.3節(jié)會講。3.3 參數(shù)校驗清單空密碼、重復(fù)用戶名、停用角色怎么攔數(shù)據(jù)庫增刪改查只是基礎(chǔ)用戶模塊真正的麻煩在校驗。以下三條校驗我每次都會做漏掉任何一條都會在測試階段暴露。用戶名重復(fù)插入前先查一下SysUser里有沒有同名用戶。數(shù)據(jù)庫雖然有唯一索引兜底但Winform里重復(fù)點擊保存按鈕時兩個請求可能同時越過查詢直接插入唯一索引拋出的異常用戶體驗極差。正確寫法是捕獲唯一索引沖突的SQLException轉(zhuǎn)成中文提示“用戶名已存在”而不是把異常堆棧直接彈給操作員??彰艽a和弱密碼密碼在客戶端不能為空這個校驗要在按鈕點擊事件里先做而不是等數(shù)據(jù)庫報錯。長度校驗至少6位如果這是給客戶內(nèi)部系統(tǒng)用可以在后臺留一個“是否強(qiáng)制強(qiáng)密碼”的配置項不寫死。停用角色角色表里可以加一個IsEnabled字段來區(qū)分啟用和停用。分配角色時CheckedListBox只勾選啟用角色保存前再校驗一遍roleIds里沒有停用角色I(xiàn)D。不然用戶綁定了一個被停用的角色登錄時權(quán)限加載為空排查起來以為是權(quán)限bug其實是數(shù)據(jù)問題。4. 操作權(quán)限設(shè)置登錄后按權(quán)限碼控制菜單和按鈕而不是到處if判斷4.1 登錄成功之后權(quán)限碼一次性加載進(jìn)內(nèi)存用戶登錄成功后第一件事不是跳轉(zhuǎn)主窗體而是把該用戶的所有權(quán)限碼查出來加載到內(nèi)存。這個查詢跨越四張表SysUser、SysUserRole、SysRolePermission、SysPermission。常見做法是寫一個靜態(tài)權(quán)限工具類加載后全程序共享。public static class PermissionHelper { private static readonly HashSetstring _permissions new HashSetstring(); public static void LoadPermissions(int userId) { _permissions.Clear(); const string sql SELECT DISTINCT p.PermissionCode FROM SysUser u INNER JOIN SysUserRole ur ON u.UserId ur.UserId INNER JOIN SysRolePermission rp ON ur.RoleId rp.RoleId INNER JOIN SysPermission p ON rp.PermissionId p.PermissionId WHERE u.UserId UserId AND u.IsEnabled 1;; using (var conn new SqlConnection(_connectionString)) { var codes conn.Querystring(sql, new { UserId userId }); foreach (var code in codes) { _permissions.Add(code); } } } public static bool HasPermission(string permissionCode) { return _permissions.Contains(permissionCode); } }參數(shù)說明HashSet的Contains是O(1)判斷比每次訪問數(shù)據(jù)庫判斷快得多權(quán)限碼統(tǒng)一用小寫或大寫風(fēng)格我建議全部用PascalCase和C#常量風(fēng)格保持一致。這個加載動作必須在主窗體展示之前完成。如果用戶沒有登錄成功主窗體壓根不該出現(xiàn)。權(quán)限加載失敗時不能靜默吞掉異常否則界面上所有按鈕都會以“無權(quán)限”狀態(tài)呈現(xiàn)看起來像系統(tǒng)壞了實際是權(quán)限沒查出來。4.2 渲染時攔截菜單隱藏、按鈕禁用而不是點擊后才彈窗操作權(quán)限設(shè)置最容易寫崩的地方是權(quán)限判斷散落在按鈕點擊事件里。比如每給“刪除用戶”按鈕加一段if (PermissionHelper.HasPermission(UserManage)) else MessageBox.Show(無權(quán)限)。代碼能跑但一個窗體十幾個按鈕就要寫十幾段重復(fù)判斷而且按鈕只是點擊時提示用戶能看到一個點了沒反應(yīng)的按鈕體驗很差。更穩(wěn)的做法是渲染時攔截窗體加載完成后遍歷所有需要控制的控件按權(quán)限碼統(tǒng)一設(shè)置Visible或Enabled。核心是寫一個遞歸掃描控件的方法private void ApplyPermission(Control root) { foreach (Control c in root.Controls) { if (c is Button btn btn.Tag ! null) { string code btn.Tag.ToString(); btn.Visible PermissionHelper.HasPermission(code); } else if (c is ToolStripMenuItem menu menu.Tag ! null) { string code menu.Tag.ToString(); menu.Visible PermissionHelper.HasPermission(code); } if (c.HasChildren) { ApplyPermission(c); } } }調(diào)用時機(jī)放在主窗體的Load事件里。關(guān)鍵點是控件的Tag屬性。給每個需要權(quán)限控制的按鈕和菜單設(shè)置Tag為權(quán)限碼代碼里不在業(yè)務(wù)邏輯里判斷權(quán)限只在渲染階段掃描一次。這樣權(quán)限變更時只需要改窗體的Tag不需要改按鈕的Click邏輯。做法反過來也成立登錄用戶擁有超管角色時直接跳過權(quán)限掃描所有控件可見普通角色走掃描邏輯。這是給管理員留后門的標(biāo)準(zhǔn)做法用角色編碼判斷。4.3 權(quán)限碼粒度按功能塊控制別把按鈕點成雪花粒度是操作權(quán)限設(shè)置最需要拿捏的地方。權(quán)限碼太少比如只有“管理員”和“普通用戶”兩種角色控制不細(xì)致權(quán)限碼太多比如“修改用戶姓名”“修改用戶密碼”“修改用戶郵箱”各一個權(quán)限碼權(quán)限配置界面會讓客戶看得頭皮發(fā)麻。我一般按功能塊劃分一個模塊一個權(quán)限碼。比如“UserManage”管用戶模塊的新增、修改、刪除、重置密碼“DataImport”管數(shù)據(jù)導(dǎo)入“DataExport”管數(shù)據(jù)導(dǎo)出。按鈕級別不再細(xì)分。原因是Winform內(nèi)部系統(tǒng)的使用群體有限操作員和管理員的職能差異遠(yuǎn)沒有大到需要給每個按鈕授權(quán)。權(quán)限碼數(shù)量控制在20個以內(nèi)配置界面用CheckBox分組勾選客戶能看明白程序也好維護(hù)。5. 用戶模塊開發(fā)避坑權(quán)限散落、日志卡UI、MD5密碼等6條血淚經(jīng)驗5.1 權(quán)限判斷散落在按鈕點擊事件里需求一變就要翻遍整個窗體現(xiàn)象客戶提出“操作員不能刪除用戶”開發(fā)人員需要在五六個窗體的刪除按鈕點擊事件里分別加判斷。改完后測試發(fā)現(xiàn)列表右鍵菜單里的刪除沒攔、工具欄刪除沒攔、快捷鍵刪除沒攔。原因權(quán)限判斷分散在各處每個入口單獨(dú)寫一份if邏輯遺漏是必然的。改需求時找不到“所有需要判斷權(quán)限的地方”。解決用4.2節(jié)的控件掃描方案權(quán)限判斷集中到一處。所有按鈕、菜單的權(quán)限碼都通過Tag配置渲染時統(tǒng)一處理刪除用戶的方法內(nèi)部再加一道服務(wù)端校驗UI層和業(yè)務(wù)層雙重保險。這樣需求變更時只需要調(diào)整Tag或權(quán)限碼不用翻窗體代碼。5.2 日志直接寫在UI線程點幾下鼠標(biāo)界面就卡住現(xiàn)象用戶操作幾次后Winform界面越來越卡點擊按鈕要等一兩秒才有反應(yīng)。任務(wù)管理器看到進(jìn)程CPU不高但界面無響應(yīng)。原因日志表寫入操作直接放在按鈕點擊事件里同步執(zhí)行每次寫日志都占用UI線程操作一多UI線程全耗在等待數(shù)據(jù)庫響應(yīng)上。更隱蔽的是日志寫入失敗拋異常直接打斷正常業(yè)務(wù)操作。解決日志寫入統(tǒng)一走后臺線程不阻塞UI。常見做法是定義一個日志方法內(nèi)部用ThreadPool.QueueUserWorkItem或Task.Run把插入操作丟到后臺如果希望順序?qū)懭胗靡粋€日志隊列加單線程消費(fèi)。日志寫入失敗不能影響主流程寫日志的代碼整體包一層try-catch失敗就丟掉本次日志。5.3 密碼用MD5裸存被脫庫等于全網(wǎng)撞庫現(xiàn)象數(shù)據(jù)庫被拖走后攻擊者用彩虹表直接反查出大部分用戶的密碼包括管理員。因為MD5相同的明文所有系統(tǒng)都一樣撞庫成本極低。原因開發(fā)階段為了省事直接用MD5(密碼)存庫沒有加鹽也沒有迭代計算。MD5本身不是為密碼存儲設(shè)計的計算太快暴力破解成本低。解決用PBKDF2或bcrypt。代碼里已經(jīng)提到PasswordHelper核心是每人生成獨(dú)立鹽鹽和哈希一起存登錄時取出鹽重新計算哈希再比對。迭代次數(shù)不要低于10000這個開銷在登錄時完全可以接受。老系統(tǒng)遷移時可以用“舊密碼哈希算法標(biāo)記”區(qū)分存量用戶用戶下次登錄自動升級為新算法。5.4 刪除角色沒處理用戶角色關(guān)聯(lián)要么外鍵報錯要么留孤兒數(shù)據(jù)現(xiàn)象刪除一個正在被用戶使用的角色系統(tǒng)報錯“外鍵約束沖突”刪除不了或者去掉物理外鍵后直接刪除用戶登錄時加載不到權(quán)限成了“有賬號沒權(quán)限”的孤兒數(shù)據(jù)。原因刪除角色前沒有檢查SysUserRole和SysRolePermission表里有沒有關(guān)聯(lián)記錄。開發(fā)階段圖省事不加物理外鍵刪除時不報錯反而掩蓋了數(shù)據(jù)問題。解決寫一個刪除角色的服務(wù)方法按順序檢查關(guān)聯(lián)表、刪除關(guān)聯(lián)數(shù)據(jù)、再刪角色表。刪除前彈窗提示“該角色下有3個用戶刪除后這些用戶將失去權(quán)限”。數(shù)據(jù)完整性靠代碼保證但提示和確認(rèn)環(huán)節(jié)不能省。這個邏輯放在一個事務(wù)里刪除失敗全部回滾。5.5 權(quán)限加載失敗時靜默吞掉異常整個窗體像沒裝權(quán)限一樣全開現(xiàn)象某客戶端登錄后所有菜單按鈕全部可見點任何功能都能操作甚至包括“重置密碼”——實際上這個用戶只應(yīng)該看日志。原因加載權(quán)限的代碼里寫了空的catch塊或者加載SQL里表名拼錯被捕獲后沒處理。權(quán)限集為空HasPermission永遠(yuǎn)返回false掃描邏輯把所有控件隱藏或顯示的邏輯寫反時會導(dǎo)致權(quán)限全部放開。我見過最危險的寫法是catch后直接return然后登錄流程繼續(xù)往下走。解決權(quán)限加載失敗必須中斷登錄流程拋出明確錯誤不讓用戶進(jìn)入主界面。調(diào)試階段可以把加載結(jié)果打印出來核對上線后保留至少一條錯誤日志。加一條驗證邏輯加載完成后如果角色數(shù)大于0但權(quán)限數(shù)為0視為異常狀態(tài)記錄日志并提示管理員檢查角色權(quán)限配置。5.6 時間字段用字符串存日志排序和查詢?nèi)强蝇F(xiàn)象日志列表按CreateTime排序時出現(xiàn)“2024/1/10”排在“2024/1/9 23:59:59”前面的情況按日期范圍查詢?nèi)罩究傆幸粌商斓臄?shù)據(jù)查不出來。原因時間字段在數(shù)據(jù)庫里建成了VARCHAR插入時用了當(dāng)前時間的ToString()格式受系統(tǒng)區(qū)域設(shè)置影響排序規(guī)則是字符串字典序和自然時間序不一致。解決數(shù)據(jù)庫里時間字段一律用DATETIME或DATETIME2代碼里用DateTime.NowDapper自動映射不要手動ToString()。界面展示格式化放到顯示層做。如果有的項目已經(jīng)用字符串存了老數(shù)據(jù)遷移時用一個標(biāo)準(zhǔn)格式y(tǒng)yyy-MM-dd HH:mm:ss重新整理排序才能可靠。6. 權(quán)限驗證SQL、熱刷新與日志歸檔上線后維護(hù)的三件小事6.1 一條SQL直接核對某個用戶有哪些權(quán)限程序界面上權(quán)限判斷是否符合預(yù)期開發(fā)時無法全部靠點擊測試覆蓋。我的習(xí)慣是寫完權(quán)限模塊后直接在數(shù)據(jù)庫客戶端執(zhí)行一條SQL把某個用戶最終能執(zhí)行的功能碼列出來核對。SELECT DISTINCT p.PermissionCode, p.PermissionName FROM SysUser u INNER JOIN SysUserRole ur ON u.UserId ur.UserId INNER JOIN SysRole r ON ur.RoleId r.RoleId INNER JOIN SysRolePermission rp ON r.RoleId rp.RoleId INNER JOIN SysPermission p ON rp.PermissionId p.PermissionId WHERE u.UserName Nzhangsan AND u.IsEnabled 1 ORDER BY p.PermissionCode;這條SQL就是把登錄后的權(quán)限查詢單獨(dú)拿出來驗證跑完能直接看到用戶掛了哪些角色、每個角色給了哪些權(quán)限。上線后客戶反饋“某人權(quán)限不對”先用這條SQL查數(shù)據(jù)再去看代碼邏輯能篩掉一半的誤報。6.2 權(quán)限熱刷新管理員改完權(quán)限不重啟程序Winform程序連續(xù)運(yùn)行幾天后管理員改了某角色的權(quán)限配置客戶端還保留著登錄時的內(nèi)存權(quán)限必須重啟才能生效。內(nèi)部系統(tǒng)這樣做影響不大但如果客戶端很多逐個重啟也是麻煩。我在權(quán)限模塊里加了一個重置按鈕管理員在主界面點擊“刷新權(quán)限”調(diào)用PermissionHelper.ClearPermissions()后重新按當(dāng)前登錄用戶ID走一遍加載流程界面控件再掃描一次。這樣權(quán)限熱更新不用重啟程序。實現(xiàn)時有個細(xì)節(jié)刷新前要記錄當(dāng)前窗體的權(quán)限狀態(tài)刷新后重新調(diào)用ApplyPermission即可否則已經(jīng)隱藏的按鈕不會自動恢復(fù)。另外一個更省事的方案是提供一個隱藏快捷鍵管理員按F12調(diào)出權(quán)限刷新入口不影響普通用戶使用。6.3 日志歸檔按時間分區(qū)還是定時清理日志表只增不改時間久了SysLog會膨脹到幾千萬行。Winform內(nèi)部系統(tǒng)一般不會高頻產(chǎn)生日志但“導(dǎo)出數(shù)據(jù)”“登錄失敗”這類操作每天都可能有幾百條一年積累下來也有幾十萬行。日志查詢界面如果直接掃全表分頁會越翻越慢。我的做法是日志表保留最近半年的數(shù)據(jù)歸檔腳本每月月底把半年前的記錄插入到SysLog_History表再從主表刪除SysLog_History按月份分區(qū)或按年份分表。這個歸檔邏輯用數(shù)據(jù)庫計劃任務(wù)調(diào)度不需要Winform程序參與。日志表的數(shù)據(jù)量大是因為沒有歸檔策略不是數(shù)據(jù)庫不行這個問題越早處理越輕松。最后說一句我的習(xí)慣用戶模塊做完之后我會刻意用“新建用戶-分配角色-改權(quán)限-查日志”四個動作走一遍全流程再故意制造幾類數(shù)據(jù)異常比如刪一個有用戶的角色、往日志表里寫超長Detail字段。這套動作堅持下來線下踩掉的坑比上線后客戶發(fā)現(xiàn)的少得多。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丁香五月手机在线| 人人爱国产| 精品人妻伦九区久久AAA片| 激情综合亚洲| 丁香五月婷婷五月基地| 激情综合网五月婷婷| 九九热这里只有精品9| 日韩欧美婷婷丁| 久久婷婷网| 99热欧| av国产精品| 亚洲欧美999| 婷婷99狠狠躁天天躁中| 国产91在线视频| 神马欧美精| 亚洲成人综合在线| 人人叉久| 变态另类色图| 婷婷色色综合| 五月激情影院| 色吧五月| 久9无码视频| 色婷婷天堂| 色噜噜婷婷| 婷婷香五月天| 色狠狠色综合| 玖玖九九99| 亚洲啪啪啪啪| 91爱操| 五月丁香久久激情综合| www.97视频| 另类激情五月| 青青草轻轻操| 婷婷情爱五月天6| 色噜噜狠狠色综合伊人| 色综合婷婷| 99热超| 成熟妇人A片免费看网站| 淫视馆AV在线| PORNY九色9l自拍视频成人| m色激情网| 九九激情网| 激情五月婷婷视频一区二区三区| 亚洲 成人 电影av在线观看| 激情五月婷婷色综合| 99精品自拍视频| 99热这里只有精品国产免费| 综合激情五月丁香9999久久精| 五月丁香婷婷啪啪网| 三男玩一女三A片| 97热在线精品| 五月婷婷与六月丁香图片激情| 欧美性爱5月天天天看| 色五月大香蕉| 色久播播| 狠狠色丁香婷婷基地| 99热在线爱| 久久久久激情| 婷婷五月亚洲激情| 天天在线久久综合| 思思热再线视频| 久久66er久久| 五月开心婷婷| 这里有精品2| 色五月婷婷大| 综合久久五月天| 这里只有免费的精品| 人人舔人人色人人高潮| 色婷婷a三区麻| 色五月av伊人| 无码字幕中文| 七七久久婷婷| YW无码| 六月五月天婷婷涩播在线| 中文字幕欧美日韩VA免费视频| 99热这里只有精品在线观看| 国产SUV精品一区二区6| 伊人激情网| 伊人激情综合| 久久性操| 五月天婷婷久色| 五月丁香婷婷五月色| 天天日天天狠狠操| 亚洲综合狠狠艹| 99re思思久久| 深爱激情丁香| 在线看片h站| 九九操屄| 91婷婷色五月| 五月丁香激情婷婷综合字幕| 色色色成人网| 噜噜五月天综合| 久久婷婷影院| 91日视频| 日撸夜撸日操| 日韩aaaaa| 色色婷婷丁香| 人妻中文字幕精品| 色色色视频免费无码| 南京搡BBBB搡BBBB| 日日夜夜干| 超碰免费人妻| 丁香五月婷婷总啪啪| 久久九九精彩| 五月激情偷拍婷婷| 毛片新网地| 五月婷婷久久综合| 久热re在线视频| 精品成人久久久久久久_一二三四视| 综合激情伊人影视在线| 深情五月天| 五月天伊人网| 少妇水多A片太爽了| 免费在线a| 色噜噜狠狠色综合网| 九九久久五月天| 丁香五月自拍| 婷婷五月天影院| 99色综合| 日本久久天堂| 久re热视频| 99综合| 婷婷五月欧美| 美女婷婷六月色| 99视频网| caop视频| 五月天婷婷在线观看精品男人| 婷婷基地爱| 操骚货在线| 大香蕉太香蕉视频97| 六月婷婷深深爱| 亚洲av骚货| 久久精品性爱| 久久99久久久久久| 91婷婷搞| 91久久综合亚洲噜噜成人在线| 五月天久久婷婷婷| 色三级色三级| 亚洲超级碰| 婷婷瑟五月天久久综合| 婷婷综合久久| 五月天激情黄色小说在线观看| 婷婷深爱五月丁香网| 婷婷亚洲五月| www.综合久久| 夜夜谢天天干| 九九色院| 色婷久九| 丁香花综合永久入口| 色优久久| 五月激情小说| 综合在线网| 99热丁香| 操逼视频一区| 五月婷婷69| 色五月,com| 婷婷激情五月天综合| 婷婷婷久久久| 欧美色色色色色色色| 欧美α√| 久热婷婷在线视频| 免费播放片大片| 天啪天啪天啪天啪| 激情六月日韩| 丁香五月激情月| 91精品国产综合久久密臀 | 亚洲色综合| 91疯狂操操操操| 99亚洲色色| 韩国中文字幕91| 五月天三级| 狠狠干综合| 丁香五月婷婷色| 婷婷五月综合久久中文字幕| 五月婷婷激情刺激| 97色婷婷| 九九精品网| 99热网精品| 99色看这里只有精品| 五月综合无码| 欧美色播综合在线观看| 草榴视频黄色网| 97婷婷五月| www狠狠爱com| 精品久久99码| 天天干天天操天天干天天操天天干天天操 | 999影院成人在线影院| 亚洲天堂啪啪| 另类图片 五月激情| 人妻丰满精品一区二区A片| 五月婷婷久久综合| 99资源在线| 五月婷婷色播| 五月天伊人日日噜影片AV| 五月天综合在线网| 99热e| 婷婷五月天久久综合88| 九九热最新| 亚洲综合色丁香五月天| 7777精品伊人久久久大香线蕉最新版| 婷婷五月天久久久| 99亚洲色色| 激情伊人网| 亚州色婷婷| 五月天婷五月天综合网在线观| 日本不卡一区二区三区| 伊人五月丁香| 久鲁鲁色网| 99爱在线| 久久99久久99精品免视看婷婷| 欧美色五月| 成人综合网站| 99这里有精品视频| 久久黄色免费视频| 67194线路二在线观看| 另类图片婷婷五月天| 亚洲视频码| 九九在线精点品| 色五月婷婷啪啪五月| 婷婷五月丁香A∨| 天天日天天爽| 综合99综合久久久久久久| 亚洲激情电影五月天色婷婷丁香一起草| 99在线资源视频| 91操熟女| 人妻少妇色综合| 婷婷情色五月天| 欧美交换配乱吟粗大25P| 五月丁香啪啪伦理电影| 99热这里只有精品13| 婷婷五月天AV在线| 精品九九婷婷| 婷婷五月激情四射手| 色色丁香五月天| 五月丁香六月花| 婷婷99狠狠| 婷色五月天| 99热日| 丁香五月激情性色郤| 久久一级免费黄色片| 色婷婷激情| 婷婷成人AV| 射久久丁香五月| 5Www色5夜| 婷婷色网| 婷婷五月天成人| 亚洲操精品| 五月婷婷狠狠干| 色婷婷AV在线| 另类伊人婷婷| 殴美激情综合网| 丁香九月激情在线视频| 丁香五月激情五月色综合| 丁香五月六月| 色吧五月婷婷| 大香蕉婷婷五月天| 99热免费在线| 国产在这里只有精品| A久久| 综合五月天婷婷色| 五月开心色| 精品人妻伦| 国产 亚洲 在线| 久久久99日本大片| 大香蕉AV电影在线| 国产精品18久久久| 91男人操女人视频| 久久久天堂国产精品女人| 成人在线日韩| 国产激情久久| 婷婷激情在线| 五月激情小说| 国产91视频| 日本99热| 久热久re| 激情五月婷婷综合视频| 亚洲精品又粗又大又爽A片| 激情综合五月天| 五月丁香六月婷婷啪啪| 91超级碰碰| 亚洲A色| 五月丁香六月婷婷手机无线| 91免费在线视频6| WWW.夜夜操.com| 综合久久五月天| 91人碰| 九月av| 大香蕉久久久| 翔田千里aV中文字幕| 久久久思思热| 久久五月激情| 亚洲五月天婷婷在线| 欧美精品熟女一区二区| 丁香婷婷偷拍| 26uuu精品国产| 日本色婷婷| 天天日日综合| 任你艹| 天天干天天爽| 四季AV综合网| 安息电影在线观看完整版| 狠狠做五月婷婷| 婷婷激情五月天小说校园| 天天爱夜夜爽| 五月激情偷拍| 久久免费干| 色女人久久| 日本综合久| jiqingtaose五月天| 色婷婷内射| 天天射天天射一道本日本社区| 色高清无码视频| 婷婷婷色五月| 伍月婷丁香花全集| 91综合在线| 亚洲第一成人无码A片| 91男女视频在线观看| 草久私拍| 男人天堂亚洲综合| 色婷婷成人五月| 大香蕉五月天| 亚洲无码激情| www.丁香五月| 狠狠人妻久久久久久综合丁香| 66精品国产成人| 亚洲精品性色| 激情欧美五月丁香| 97人人看一| 天天日狠狠| 六月天婷婷| 亚洲亚洲人成综合网络| 日本久久婷婷| 日本熟女二区| 婷婷五月天av| 久久久久久久91| 99久视频| 五月丁香亭亭成人电影| 91精品久久久久久综合五月天| 国产亚洲精品久久久久久久久动漫| 日本操片| 色五月激情五月天| 99热有精品在线观看| 99亚洲天堂| 亚洲激情视频网| 五夜婷婷| 9精品在线| 天天做天天摸| 成人在线视频网| 日本少妇AA一级特黄大片| 丁香五月天激情婷婷丁香六月| 五月激情小说| 亚洲自拍天堂| 一级二级香港秋霞欧美欧美秋霞| 亚洲情欲| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 天天操天天插| 五月综合视频在线| 婷婷五月综合在线视频| 久色网五月| 99热这里只有精品8| 婷婷五月天精品| 婷婷五月天偷拍| 欧美搡BBBBB摔BBBBB| 91久久久久久久| 婷婷人人操| 精品无码久久久久久久久| 丁香五月天堂| 伊人五月天| a在线观看| 亚洲天堂大香蕉| 九九视屏| 国产精品激情五月天色婷婷| 色综合99色| 亚洲夜五月| 天天干夜夜想| 久久国产性爱A V| www.久久爱| 色情婷婷。| 欧美丁香五月夫妻天| 久久久久久久久久久久久久久久久精典| 色狠狠伊人久久五月丁香| 99视频只有精品| 丁香五月激情综合在线观看| 疯狂做受XXXX高潮A片动画| 99这里只有精品视频在线| 欧洲色| 九九热这里只有精品首页| 99热这里只有精品22| 99re最新地址视频| 伊人五月婷| WWW,婷婷,COM| 手机旧版看人妻1025| 综合伊人久久| 深爱激情网五月| 97人人超| 久色资源网| 国产永久一黄| 色色射| 婷婷五月天av网| 人妻熟人中文字幕一区二区| 婷婷五月激情视频在线| 99久久久99久久91熟女| 美女婷婷激情亚洲| 久久五月天色婷婷| 亚洲激情高潮| 天堂久久性| 激情五月天电影| 婷婷五月天激情综合| 午夜天堂一区人妻| 激情99热| 亚洲精品乱码久久久久久综合| 丁香网五月天| 日本三级黄色大片| 在线可以看的av网址| 婷婷五月天综合久久日美女| 91丨九色丨43老版熟女| 五月天停停成人网| 综合久久99| 99色免费观看全部| 色婷婷综合网站| 五月激情综合五月| 婷婷她六月天| 99婷婷五月天激情| 午夜成人片400| 99热这里只有精品99| 五月丁香日本一抹本| 五月丁香亚州综合网| 五月婷婷99热| 五月丁香六月婷婷无码| 激情婷婷丁香色五月综合| 人人超碰99| 亚洲五月天激情| 第四色首页| 婷婷丁香社区网| 91碰操| 五月色综合| 这里只有精品视频在线| 五月天在线视频尤物视频在线看| 伊人五月天男人的天堂在线| 六月色播| 久久婷婷草| 日韩成人精品中文字幕电影| 久操大香蕉| 婷婷五月天影视首页| 五月丁香六月婷婷亚洲激情综合| 亚洲综合九九| 激情五月婷| 五月婷婷激情在线| 操人妻AV| 夜精品无码A片一区二区蜜桃| 日韩另类在线观看| 99视频这里有精品| 婷婷金品综合视频| 97婷婷五月天| 五月婷婷婷自由综合| 日本女天天爽| 天天五月香欧美| 五月丁香久久网| 久久久五月天网站| 欧美成人日韩| 97精品综合久久内射| se色婷婷视频| 狠狠婷婷综合| 99久久婷婷国产综合精品电影| 996er热| 日本久热| 婷色五月| 操99| 天天艹夜夜艹| 五月丁香啪啪啪| 久久99网| 99在线精品观看99| 成人午夜天| 小香蕉av| 亚洲视频在线网| 黄色片avv| 热热色色五月天婷婷| 狠狠做深爱婷婷久久综合一区| 99综合久久| 99a级片| 婷婷九月亚洲| 色五月激情五月天| 久99热| 超碰人人色| 大香蕉520| 伊人久久婷婷| 欧美成人精品A片免费一区99| 人妻22p| 强壮公让我夜夜高潮A片视频| 久热无码| 成人视频网| 亚洲欧美在线观看| 91N 一起草| 伊人大香蕉在线视频| www.99热这里精品 | 日韩五月婷婷| 婷婷99中文字幕| 欧美精品99久久久| 热的国产99热| 色五月天婷婷| 久久久精品人妻| 粉嫩AV久久一区二区三区| 少妇AB又爽又紧无码网站 | www.思思99热| 色婷婷先锋| 五月天激情影院| 四色五月婷婷| 国产AV成人精品| 金品在线视频99| 色婷婷97| 亚洲一区二区无码蜜乳av| 99er热精品视频| 亚洲综合视频网| 国产精品日日躁夜夜躁| 色色色热| 久久艹99| 亚洲丁香网| 九九在线视频| 欧美日本免费一道免费视频| 色色五月天网站| 色波激情五月天| 毛片色五月| 久久99久久99久久99人受| 亚洲爆乳无码精品AAA片蜜桃| www.亚洲激情.com| 久久99热这里只有| 91日视频| 五月婷A V在线| 性爱五月丁香| 丁香五月欧美色综合| 久久婷婷网| 中文字幕 中文字幕明步| www.日本91| 五月激情视频网| 天天操天天插| 91狠狠色丁香婷婷综合久久精品| 大香蕉伊在| 五月熟妇婷婷久久| 三级黄网站| 伊人激情综合| 狠狠擼综合| 中文字幕AV网址| 五月丁香亭亭电影久久| 99色热| 99热免费在线| 久久加勤综合| 亚洲九九在线| 无码日本精品XXXXXXXXX| 一区三区视频有限公司| 婷婷丁香五月综合激情小说| 熟妇内谢69XXXXXA片| 九色91国产| 色婷婷AV久久久久久久| 亚洲综合网在线| 九九色院| 五月婷婷69| 婷婷在线网| 亚洲午夜精品久久久久久人妖| 99色色视频| 抽插特写| 五月婷婷激情四月| 狠狠色噜噜狠| 激情黄色五月天| av九九| 久久精品五月天| 色婷婷婷婷| 国产亚洲99久久精品熟| 色色色欧美| AV成人在线播放| 亚洲欧美日韩另类| 夜夜操夜夜操| 日本3级片一区2区| 这里只有精品在线视频在线观看| 永久天堂日本| 天天插天天插天天插天天插| 婷婷激情五月天激情小说| 色婷婷五月亚洲| 中文字幕日本最新乱码视频 | 在线观看av网站| 97精品综合久久内射| 五月天免费色| 日本eVa一区=区视频| 亚洲综合网区| 极品少妇XXXX精品少妇偷拍| 五月花婷婷最新| 亚洲蜜桃精久久久久久久久久久久 | 国产黄色一级片| 色综合五月天| 九月激情网| 99精品自拍| 综合网色| 夜夜 操无码| 久久亚洲婷婷| 8090在线影视少妇| 天天撸天天干天天插| 久久男人网婷婷| 久久99热精品a片在线观看| chaopengdaxiangjiao| av在线色五月丁香婷区久| 99只有精品| 久热这里只有精品在线观看| 久久久久久久久久久-久五月天婷婷| 五月婷在线色视频| 在线伦子99热| 五月天婷婷久久视频| 久久99最新| 99热有精品在线观看| se影音资源在线观看| 99久久99久久| 国自产拍偷拍精品啪啪一区二区| 人妻久久久久久久久久久| 9视频1在线| 9999久久久久| 六月色播| 亚洲另类婷婷五月丁香在线播放| 欧美婷婷色| 第五色色色婷婷| 亚洲激情av| 强辱丰满人妻HD中文字幕| 色深爱五月| 五月丁香综合啪啪| 久久这里只有精品视频15 | 久久66精品| 五月天激情网址| 丁香五月婷婷色| 99热99色| 色色婷婷婷丁香五月天| 成人丁香五月| 婷婷五月综合网| 天天综合久久| 中文字幕丰满乱孑伦无码专区| 日本天堂免费99| 婷婷丁香色五月天久久88| 免费播放AV| 色五月婷婷老师| 夜夜操天天干| 五月婷婷少妇之| 丁香五月综合激情性爱| 亚洲无码影音| 色五月天在线观看| 99视频| 丁香五月天激情综合网| 亚洲久热| 天天肏天天肏天天肏| 麻豆AV一区二区三区| 五月丁香六月情亚洲| 六月五月丁香五月欧美| 丁香激情五月| 日韩精品在线观看9| 婷婷激情综合网| 91viP在线看| 香蕉AV777XXX色综合一区| 色综合爽| 色综合久久天天综合网| 精品爆操| 伊人青涩网| 丰满少妇猛烈A片免费看观看 | 色婷婷XXXXX| 久久嘟嘟丁香| 91精品久| 亚州成人综合在线| 国产精品久久久久久妇女6080| 超碰成人在线观看| 激情综合网激情五月天| 日本久久爱| 婷婷日日天天| 激情亚洲色图片丁香综合| 99re熱| 婷婷五月天奸女| 亚洲成片在线观看| 亚洲激情Av| 亚洲岛国电影| 99爱在线| 91九色 熟| 亚洲狠狠丁香婷婷香蕉| 国产真实乱对白精彩| 久久草大香蕉| 日韩999| 国产激情综合五月久久| 91精品综合久久久久久五月丁香| 激情五月天 婷婷| www.99在线| 婷婷天堂站| 9久精品视频| 成人五月天丁香| 91大神操美女| 9l视频自拍9l九色成人| 大香蕉五月丁香| 综合网五月| 五月婷视频| 可以免费观看的AV| 色域五月婷婷丁香| 色综合激情| 天天操人人干| 99无码| 伊人五月天| 嫩草AV久久伊人妇女超级A| 天天色情站| 九热视频在线伦| 五月丁香婷婷99| 99久久五月丁香野外| 日韩高清久久| 九九成人精品免费视频| 日本丁香五月婷婷| 色五月婷婷久久大| 婷婷五月天久久| 久久九九99.www| 亚洲乱码w在线观看| 丁香久久综合| 99热只有这里有精品| 欧美成人在线观看| 涩 五月 婷婷 狠狠| www.久久爱.com| 色热久资源| 丁香久久五月天视频在线观看| 丁香色情五月综合网站| 99久视频| 九九热在线观看视频| 亚洲亚洲人成综合网络| 九九热在线视频观看免费10| 黄色91在线观看| 手机在线视频观看9| 96精品国产综合久久久久久| 亚洲综合视频网| 色的色综合| 色色色综合色| 婷婷久久五月天| 任我干视频在线观看| 操逼巨乳91| 婷婷激情五月吧| 五月天 另类图片| 91精品婷婷国产综合久久| 亚洲日韩一页精品发布| 欧美日韩国产一区二区| www.日韩艹| 婷婷97碰碰| 清纯唯美 激情四射| 玖玖午夜视频| 天天添天天摸天天天天做| 综合婷婷都市激情| 少妇高潮A片无套内谢麻豆传| 亚洲在线成人| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 日日操夜夜爽| 日韩无码人妻一区二区| 日本无va视频| 超碰色综合| 狠狠ri| 欧美日韩成人| 色综合天天综合成人网| 天天日天天久久青青| 久热大香蕉| 色五月色五天免费视频| 亚洲网站观看视频| 天天开心天天色| 色色亚洲视频| 99色热综合| 天天色天天色天天色天天色天天色天天色| 丁香五月98| 色屌丝中文字幕| 五月天停停日日| 婷婷五月色亚洲| 婷婷午夜精品久久久| 97色一二三| 五月在在观看| www超碰| 国产免费一区二区三州老师F1F1……| 激情色情五月天| 丰满老熟妇BBBBB搡BBB| 五月婷婷无码| 日日做夜夜爱| 日本色婷婷| yellow视频在线观看91| 人人摸人人澡人人| 综合天堂AV久久久久久久| 丁香六月色婷婷欧美| 久久久www| 97干婷婷| 另类专区在线观看| 综合一区二区三区| 五月丁香六月激情| 色婷婷五月成人网| 五月丁香六月婷婷激情视频在线观看免费 | 丰满少妇乱A片无码| 色色无码日韩| 五月婷婷色播| 丁香五月六月久久综合| 色五月综合网| 先锋男人91资源| 日本色狠狠| 91色色色视频| 九九婷婷网五月天| 在线伦子99热| 婷婷综合97| 中文精品在| 99色婷婷视频| 九九视频这里只有精品在线播放| 日本色色色| 五月婷婷成人网首页| 天天色天天操天天射| 久久人妻情侣| 超碰免费观看| 欧洲亚洲免费视频9| 免费观看18视频网站| 四五月婷婷| 久久久久久久久久久久久久久久一道本| 久久成人天| 中文字幕成人日韩| 婷婷五月天网址| 影音先锋毛片网站| 色五月亚洲| 色五月婷婷丁香国产在线| 久久er99热精品一区二区 | 九九热在线精品视频| 五月丁香色婷婷基地| www,setingting| 人人干人人看| 亚洲午夜AV| 99热这里| www.久久av.com| 狠狠色狠狠色综合日日91| 亚洲人成色A777777在线观看| 99热在线中文字幕| 精品久久久人妻| 免费播放AV| 99riAv1国产在线观看| 婷婷丁香社区网| 九九9久九9国产视频| 激情五月天伊人影院| WWW.久久久久久久| 丁香五月天社区| se99视频| 深爱五月月天| 色婷婷av综合网| 97 A I色色| 久久激情网| 99热10在线高清播放| 国产97色在线 | 日韩| 色婷婷在线综合色播网| 天堂在线婷婷| 涩五月婷婷| 丁香五月在线| WWW,色五月| 超碰2021| 免费黄色片子| 丁香五月精品| www91久久| 婷婷五月天激情四射| 婷婷五月六月| 99日本黄站| 综合狠久久| 九月婷婷| 2020夜夜操天天爽| 婷婷射丁香| 五月婷婷伊| 久久久久久久久久8888| 婷婷色导航| sewuyue第四色| 色婷婷狠狠| 久久区区一二三av| 亚洲亚洲人成综合网络| 丁香五月婷婷综合精品素人| 少妇久久诱惑视频| 成人av在线电影| 99热99日天天干| 五月天婷婷色| 婷婷五月天奸女| 五月天狠狠网| 激情都市五月天| 久久中文人妻系列| 桃色激情五月天| 免费碰碰视频久| 五月天婷婷综合网| 婷婷色色网| 中文不卡一二区| 九九爱这里只有精品| 久99在线视频| 综合网网欲色| 五月丁香激情综合网官网| 99色视频| 色婷婷小说网| 欧美久热| 99碰超| 久久色亭亭五月天| 婷婷五月六| 五月婷婷开心丁香| 色情激情五月| 六月色色婷婷| 亚洲欧洲自拍图片专区五月天| 丁香五月婷婷综合精品素人| 99久久精品国产色欲| 久久九九99.www| 99干免费视频| 欧美肉大捧一进一出免费视频| 亚洲中文字幕AV| 91碰| 97香蕉碰碰人妻国产欧美| 色色亚洲| 色欲久久久久久综合网综合网| 婷婷综合精品视频97| 日本欧美国产| 开心五月深爱激情| 五月婷婷网五月在线| 色五月av伊人| 伊人六月无码视频| 丁香五月老师| 精品51XX| 色播激情五月天| 激情综合色婷婷六月天| 天堂综合久| 亚洲无线视频| 大香蕉五月天婷婷| 热九九精品| 五月天激情国产综合婷婷婷| 乱精品一区字幕二区| 丰满老熟妇BBBBB搡BBB | 嫩草视频观看| 香蕉操亚洲| 91热爆在线| tingtingjiqingwuyue| 色婷婷五月天激情久久| 99秘 在线| 影音先锋人妻出差| 亚洲天天操| 丁香婷婷五月色成人网站| 九九九九毛片| 亚洲视频一区| 超碰免费观看| 91色吧网| 五月丁香怕啪啪| 99性感视频| 婷婷成年人免费视频| 99热老网站| 五月婷丁香| 影音先锋男人AV资源站| 久热re在线视频| 婷婷午夜激情| 99re这里只有精品免费| 伊人深爱综合| AV成人在线播放| 五月丁香六月在线| 色九四色| 久久刺激网| 婷婷五月丁香综合激情小说| 噜噜噜噜噜色| 亚洲av网站| 8090在线影视少妇| 欧美日韩成人在线网| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 国内熟女黄色系列| 偷偷操99| 人人色性网| 五月婷婷av| 激情五月天小说网| av在线不卡播放| 丁香六月啪啪| 天堂AV三级| 五月丁香中文| 婷婷五月天成人网| 亚洲网在线观看| 亚洲综合在线播放| 99热日| 9l视频自拍9l九色成人| 九九操屄| 亚洲色图日韩网址| VA国产在线综合网站| 色五月欧美| 亚洲乱码日产精品BD在线观看| 91丨九色丨国产在线| 久久久婷丁香五月天激情综合| 久久久久综合激动五月天| 婷婷成人五月天| 国产真实乱对白精彩| 98色花堂98t.R| 婷婷综合伊人丁香| 狠狠色综合网站久久久久| 久久婷婷网址| 色婷婷色久综| 天天天天天日| 久色资源| 噜噜噜狠狠色综| 婷婷五月情天| 影音先锋日本三级资源| 草草视频91| 久久天天| 婷婷色色色| 婷婷丁香高潮了| 黄网在线播放| 久久五月婷婷视频| 狠狠色精品综合| 中文字幕在线免费观看视频| 狠狠色噜噜狠狠亚洲A∨| 99 频99热国里只有精品| 人妻AV在线观看| txt五月激情四射网综合俺也来了| 久久亚洲色导航| 亚洲无码99| 五月天色色色色色| 欧美美女国产日韩一区二区久| 人人操插| 久久综合首页| 丁香五月天中文字幕| 中文字幕 码精品视频网站| 久久网日本| 亚洲第一精品成人999久久精品| 色网五月婷婷| 六月伊人婷婷| 午夜天堂一区人妻| 天天网站天天爽| 九九热re99re6在线精品| 99热观看| 婷婷丁香色无五月| 影音先锋女人AA鲁色资源 | 99热香港| 亚洲综合色网| 婷婷五月丁香五月丁香| 97视频91| 欧美日韩日韩成人| 可以看的AV网站| 97在线视频 欧美| 婷婷干五月综合在线播放| 色婷婷五月综合激情中文字幕| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | 婷婷色情 | 狠狠色无码| 丁香六月激情| 六月婷婷俺也去| 国产亚洲精品久久久久久郑州| 五月婷婷六月丁| 人妻人人操| 九九热这里精品| av亚洲国产小电影| 99福利视频| 办公室少妇激情呻吟A片在线观看| 五月婷婷久久激情| 少妇高潮呻吟A片免费看软件| 亚洲综合干| 久热A片| 五月成人天| 久久精品五月天| 久久99综合| 激情丰满熟妇五月| 日韩AC在线免费观看| 激情综合色播| 日本久久超碰| 精品五月天| 婷婷色日本| 九一牛视频探花| 激情视频综合| 99精品国产在热久久| 欧美大肥婆大肥BBBBB| 免费观看的AV| 国产在线自| 久久伊人大香蕉| 日韩好吊操| 九九热9| 精品久热69| 看黄的网站18禁| 亚洲人操亚洲人| 开心五月综合激情网| 丁香五月天在线观看视频| 婷婷五月综合性爱| 天天爽天天操| av九九| 熟女色色一区二区| 伊人婷婷色| 深情六月婷婷综合久久| 五月丁小婷婷激情四射| 久久色亭亭五月天| 九九综合视频在线观看| 婷婷五月激情四射手| 五月精品| a69在线视频| 欧美色色日韩| 色婷婷狠狠18禁| 这里只有精品视频99| 精品久色| 一片AV片免费播放| 色狠狠综合| 天天操天天干天天日| 这里只有精品,日韩视频| 大香伊人婷婷| 九九久久99| 99成人在线观看| 99热99在线精品| 激情久久肏屄视频| 婷香五月网在线| 4399欧美另类视频| 国产美女无遮挡裸体毛片A片 | 人人摸人人摸| 激情五月,激情综合网| 亚洲XX网| 国产精品人成A片一区二区| 久久久久这里只有精品| 99久久综合| 国产44页| 亚洲人人操| 亚洲99在线| 99热这里只有在线| 天干天天干天天天天天| 亚洲AV中文在线| 五月天激情图片网| 九九日伊人| 婷婷中文字幕| 性一交一乱一交A片久久四色| 超碰成人影视| 做爰丰满少妇1313| 成片免费播放| 婷婷欧美| 五月天六月婷婷电影| 色五月五月天| 69热在线| 色色五月天网站| 99热亚州综合| 国产精品日本一区二区在线播放| 人妻22p| 操操人人| 亚洲无码99| 人妻久久久久久久 | 日韩九九| 中文字幕+乱码+中文字幕在线观看| 色五月成人| 1234操逼网| 97人人操人| 俺来也狠狠| 伊人久久丁香狠狠婷婷综合香蕉 | 99热在线观看| 五月天激情四射| 丁香五月天堂| 日韩久久色| 人妻aV在线| .操區COm| 狠狠干,狠狠操| α久久| 99热 在线观看| 99丁香五月婷婷在线| 97在线干| 伊人五月天久久| 香蕉97碰碰碰超视精品| 玖玖色综合色| 91九色PORNY肉丝在线| 久久99视频| 五月丁香香蕉| 中文av网站| 婷婷五月天久久久| 丁香五月婷婷激情中文| 青青草原福利在线| 夜夜操夜夜操| 这里只有精品久久| 午夜免费试看| 这里只有精品在线观看视频| 狠狠穞A片一區二區三區| 色五月中文网| 久人操| 91精品久久久久久久| 丁香六月啪| 色色a| 欧美性猛交AAAA片黑人 | 农村熟妇高潮精品A片| 国产精品日本一区二区在线播放 | 包操45分钟网站| 噜色精品| 777.色色| 另类图片婷婷五月天| 五月丁香六月婷婷免费| 亚洲小视频| 99在线观看精品视频| 九月婷婷久久久| 无码99| 亚洲 在线 另类| 久久在线视频免费观看| 久久久久久久久18久久| 国产综合A片| 婷婷午夜精品久久久| 美女黄频aⅴ视频| 五月天天天综合| 亚洲色小说在线综合| 毛片色五月| 婷婷五月天伊人| 夜夜撸天天操| 99视频在线观看地址| 国产综合丁香五月天| 狠狠色综合网站久久久久| 婷婷丁香五月天熟女丝袜| 五月天婷婷操逼视频| 噜噜色五月| 丁香六月天婷婷开心综合| 色99色| 婷婷五月色| 国产无遮挡又黄又爽免费网站| 91seAV| 色色五月天激情| 九九色热视频| 日本久久高清| 午夜无码熟熟妇丰满人妻| 影音先锋综合网| Av大香蕉| www.亚洲激情| 色情丁香五月婷婷精品| 国产精品扒开腿做爽爽爽A片唱戏| 婷婷丁香六月天激情四射网| 色情丁香五月婷婷精品| 色综合色欲综合天天免费| 亚洲五月花| 办公室少妇激情呻吟A片在线观看| WWW.久久99| 激情婷婷综合| 荷兰av一级| 婷婷五月,综合伊人| 91婷婷丁香五月亚洲| 成人五月天婷婷| 天天色宗合| 色婷婷在线视频| 色综合色色色色| 熟女激情网| 久久人妻视频| 亚洲日韩一页精品发布| 欧美色色干| 极品 少妇 内射| 五月丁香色婷婷久久| 五月天啪啪网| 五月婷婷六月丁香激情深爱| 99久热| 好叼操在线观看| 先锋男人99资源| 黄网在线免费观看| 丁香五月婷婷亚洲天堂| 丁香婷婷免费| 99热人人| 日韩成人电影av| 伊人丁香婷婷东京| 天天干,天天日| 亚洲成人AV在线观看| 亚洲成人黄色网| 国产亚洲精品久久久久苍井松| 五月天堂婷婷| 九九热最新视频| 另类丁香五月天区图| 无码一区二区三区四区五区| 综合色情网| www.97干视频| 久久综合五月天| 99九九精品视频推荐| 亚洲Av入口| 九九久久99| 九热视频| 亚洲天堂啪啪| 啪啪东京热| 婷婷五月天播播| 色婷婷精| 美国天天日天天操| 中文字幕日产A片在线看| 五月婷婷综合激情| 91热在线| 91啪啪| 五月婷婷性爱| 亚洲成人综合在线| 五月天综合影院| 综合超碰熟| 亚洲欧美婷婷五月色综合| 超碰人人操人人9| 播五月丁香三月婷婷| 婷婷久久在线| 精品久热69| 久久久婷丁香五月天激情综合| 涩五月婷婷|