免费国产精品自在自线-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
返回資訊列表
成人无码髙潮喷水A片| 五月婷婷综合在线视频小说| 天堂久久丁香| 色婷婷网| 女人被男人吃奶到高潮| 色婷婷狠狠久久综合五月| 99精品偷拍视频| 思思热这里只有精品| 久久久久人妻中文| 五月丁香va| 久七香蕉| 欲色人妻| 婷婷午夜| 日本一级黄色电影| 大香蕉中文| 丁香五月天婷婷中文| 七七色色综合| 美女爆乳18禁www久久久久久| 色九月| 丁香五月欧美激情| 久久 这里只有精品1| PORNY九色9l自拍视频成人| 丁香六月天婷婷色| 色色三级视频| 久久五月婷6 9| 伊人激情综合网| 色狠狠婷婷| 99热免费在线| 91精品久久久久久久| 五月丁香六月婷婷亚洲视频| 噜噜噜色噜噜| 97涩涩丁香五月天| 激情色中文| 99啪啪网| 久久久久久久久久91| 五月天大香焦| 九九99视频精品| 九九激情网| 亚洲愉拍99热成人精品| 人妻视频在线| 人人妻人人澡| 色色色欧美| 涩涩涩五月天| 综合五月丁香六月婷婷| 色久影院| 超碰在线人妻| 色综合五月天| 日韩综合成人| 色月丁| 日本成人噜噜噜| 激情无码五月天| 色综合久久44| 天堂婷婷五月在线| 丁香色啪综合| 久热视频这里只有精品| 一级操逼内射在线视频| 99这里只有精品|v| 第四色五月婷婷| 激情小说视频图片网| 五月丁香AV、伊人业余、性色熟妇 | 狠狠操在线视频| 九九免费精品在线视频| 精品人妻久久久| AV五月丁香| 亚洲精品操一操、噜一噜、摸一摸、爽| 九九色影院| 91黄操| 日韩精品一品二区三区的使用体验 | 五月天久久丁香| 久久这里99| 99热精品少| 婷婷五月综合激情| 伊人婷婷激情| 91九色精品| 亚洲无码免费看| 麻豆忘忧草午夜| av超碰在线| 欧美日本99| 墨西哥毛片内射精| www.色五月.com| 美日韩成人| 九九色中文| wWwCom夜操wwW| 欧美群妇大交乱婬网| 密臀久久| 久久综合五月天| 色五月婷婷影院| 激情av在线| 色色色9| 99视频| 久久九九99| 九九九九精品精| 五月九九综合| 欧美六月| 五月丁香六月激情啪| 91wwmm导航| 日韩在线一级| 无码少妇高潮喷水A片免费 | 五月丁香综合中文| 噜噜在线| 九月婷婷综合网| 丁香色综合| 再綫Av免费視品| 99视频久久免费视频| 秋霞簧片| 久9久9热久热| 五月丁香婷婷综合网| 深爱激情综合网| 日韩 中文 欧美| 伊人久久艹| 免费无码毛片一区二区A片| 97伦乱| 1024成人在线观看| 六月色色婷婷| 91啪啪| 国产又色又爽又黄又免费| 97久久精品视频| 色五月综合在线| 森林影视大全,最好看的2019年视频 | 久青草大香蕉| a69在线视频| renre人人操国产超碰在线 | 91久久精品视频| 亚洲在线综合| 丁香五月天啪啪a日本| 天天肏视频| 色欧美一级| 天天综合网~91| 综合丁香婷婷五月天| 综合网网欲色| 日韩黄黄| 综合久久99| 亚洲AV成人一区二区在线观看| 五月天激情久久| 丁香综合伊人AV| 99久在线精品99re5热视频| 欧美大片免费播放器| 97在线干| 五月天快乐开心激情网| 9久久婷婷国产综合精品性色| 亚洲AV影片在线观看| 婷婷射丁香| 99.色| 五月婷婷色五月| 人碰91| 五月婷婷综合激情| 玖玖综合色| 丁香六月综合| 五月婷婷丁香五月婷婷| 人妻丰满精品一区二区A片| 99re热99| 色三级色三级| 综合久久六月| 深夜激情网| 大战熟女丰满人妻AV| 欧美色久| 婷婷激情视频| 色噜噜97视频在线观看| 99热99极品观看| 欧美影院| 欧美日韩日韩成人| 五月激情六月综合| 久热99久热| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 日本丁香五月| 91热久| 日本九九九九| 日韩 中文 欧美| 思思热在线视频99| 少妇高潮呻吟A片免费看软件 | 99天堂网最新| 思思久久99热只有频精品66| 婷婷色综合| 91久久1118| 久色资源网| 国产乱妇乱子在线播视频播放网站| 深爱五月激情综合| 五月Huangsewang| 五月色无码| 少妇真实被内射视频三四区| 婷婷五月天堂一本在线| 色久99| 日本成人噜噜噜| 五月天婷婷激情四射综合| 亚洲人人96@| 无码99| 深爱激情中文五月天av| 国产精品久久欧美久久一区| 色情五月天首页| 亚洲日韩一页精品发布| 99热成人在线观看| 99re热在线视频观看| 久久机热/这里只有精品| 天天视频精品9| 五月天另类视频| 日韩一级网站| www久久久| 天天摸天天舔天天爽| 成人精品视频99在线观看免费| 成人色情五月天婷婷丁香| 一本色道久久88综合日韩精品| 丁香婷婷五月综合影院| 丁香久月婷| 日韩综合久久| 26UUU精品一区二区c〇m| 丁香激情综合| 激情五月天色网站| 天天综合亚洲综合| 香蕉综合网| 丰满少妇猛烈A片免费看观看| 99热99热不卡| 丁香婷婷激情综合五月激情| 亚洲精品九九| 这里只有精品视频99| 丁香五月瑟瑟| 超碰av天堂| 久热久| 婷婷开心激情五月激情网| 久久综合无| 精品久热| 久99在线视频| 五月天精品综合| 久久久8| 国产乱妇乱子在线播视频播放网站| 日韩精品二三区| 猫咪伊人久久| 91九色偷拍| 超碰日日操| 亚洲激情高潮| 亚洲天堂热| 在线中文AV| 婷婷五月电影| 婷婷夜夜操| 丁香五月性爱| 大香蕉五月| 九九综合| 色婷婷久久综合| 六月色色婷婷| 丁香激情五月综合网| 97丁香视频| 激情小说在线视频| 色婷婷激情| 蜜乳国产网站| 伦乱美欧| 色色婷| 97干在线免费| 久久婷综| 亚洲九N| 九九色色网| 。久久久久久久久久久久久久人妻| 久久99婷婷| 性爱技巧五月| 202丰满熟女妇大| 97人人操| 无码髙清| 天天色噜| 噜噜色婷婷| 激情五月综合色婷婷| 日本97在线视频| 万月丁香狠狠爱| 99免费热视频在线| 超碰在线视屏| 丁香五月综合婷婷| 五月天成人综合| 99色性爰网络| 综合久久人妻| 久久九九99亚洲国产久精综合| 激情图片亚洲| AV大香蕉| 久久这里这里有精品免费视频| 2020日日干| 丁香五月瑟瑟| 丁香深五月婷婷| 欧美三级巜人妻互换| 狠狠五月天| 丁香婷婷五月色成人网站| 99热6色| 97婷婷丁香五月| 六月丁香基地| www.婷婷五月天啪啪| 久久黄A片| 99热偷拍| 激情综合五月激情| 夜夜天天久久婷婷| 欧美综合五月丁香五月天| 99色最新在线视频| 亚洲丁香五月美女| 少妇人妻凹凸视频| 婷婷五月丁香网| www.五月天。com| 天天爱天天做综合| 69激情小说| 狠狠干总合| 婷婷丁香五月精品| 丁香婷婷十月| 思思久久精品| 激情婷婷五月| 色爱五月天| 天天狠狠夜夜狠狠2023| 1000部毛片A片免费观看| 天天干天天干天天| www,婷婷,com| 亚洲狠狠婷婷| 玖玖在线视频| 伊人天天色| 视频这里只有精品16| 婷婷五月天伊人网在线观看视频| 五月丁香做爱视频| 婷婷人人操| 六月丁香婷婷综合狠狠爱夜夜爱| 久久久这里有精品| 九月丁香八月婷婷加勒比| 亚洲xx在线| 婷婷五月天大香蕉在线视频观看| 国产97色在线| 丁香五月骚喷水视频| 激情狠狠丁香月| 日日舔夜夜操| 超碰在线看| 人人草人人舔| 久久精彩视频99| 丁香天堂夜| 国产成人av在线播放| 丁香婷婷人妻| 天天爽天天干天天| 亚洲五月婷| 婷婷激情四射| 综合 蜜月 婷婷| 五月婷婷影院| 六月婷婷亚洲| 亚洲综合网 665566| 日日干日日| www.亚洲激情.com| 丁香五月激情六月欧亚激情综合导航| 激情综合网亚洲色图| 色五月天成人| 五月综合激情婷婷六月色窝| www.99久久久久99| 青青草搞屄视频网站| 亚洲五月天婷婷在线| 日韩在线视频网站| 丁香五月婷婷av影院| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 九九九九大香蕉| 亚洲天堂AV免费片| www.五月天婷婷| 99在线免费视| 五月天婷婷乱论小说| 色色com| 色在线免费观看| 婷婷精品在线| 人人草人| 中文字幕日本最新乱码视频| 99色婷婷视频| 天天色天天日| 2025超碰| 久久色五月天| 色色免费网站| 色色丁香色五月| 激情另类综合| 久操无码| 色色婷婷色色| 99精品久久久久久久婷婷久久| 亚洲在线操| 91av视频| 六月天无码网址| 九九碰九九爱97超| 大香蕉婷婷丁香视频在线| 嫩草AV久久伊人妇女超级A| 十区AV| 天天干夜夜b| 婷婷射丁香| 4399无码视频二区| 五月丁香六月色情网欧美| 亚洲AV日韩无码| 91呦呦呦| 成人欧美Va| 婷婷婷婷婷婷婷五月丁香| 婷婷丁香综合在线| 九九热手机在线视频| 综合五月天| 九九人人自拍| 色色色热热热| 亚洲无码AV片| 丁香五月六月婷婷殴美综合| 色婷婷五月综合激情中文字幕| 99 r热| 97碰| 一区二区免费看| 五月停停激情网| 六月丁香影院| 婷婷五月丁香国产| 欧美久久婷婷| 欧美A片在线视频免费观看| 五月天婷a在线| 亚洲色五月| 人人操人人操919999| 五月在线| 六月激情丁香一道本7777| 婷婷五月天综合色| 人人操婷婷| 这里只有精品69| 伊人在线视频| 新激情五月天色播| 婷婷五月综合丁香久久| 99re这里只有精品视频了| 免费视频在线观看的网站| AV美美午夜| 久久ww| 激情婷婷五月女| 天天噜噜| 五月天婷婷色紫薇阁| 色婷婷亚洲婷婷| 色婷婷视频| av狠狠操| 天天婷婷天天| 淫视馆av三区| 亚洲色五月婷婷| 日本色色影院| 在线婷婷| 2020久久婷婷五月| 狠狠操狠狠色| AV性爱网| 五月婷在线| 97天堂| 天干干夜夜操| 9999热在线| 99久久激情视频| 大香蕉人人网| 亚洲成人免费电影| 色婷婷色五月另类综合| 99热在线观看| 色偷偷色婷婷| 大香蕉伊人久久| 久久九九网| 狠狠操天天操天天操| 久久久天堂国产精品女人| 婷婷五月天成人网站| 色丁香五月婷婷综合久久| 99亚州综合精品成人网| www.色综合.com| 国产成人99久久亚洲综合精品| 国产噜一噜天天噜| 大香蕉福利导航| 婷婷六月啪啪 | 丁香五月婷中字幕| 天天看A片| 欧美日韩成人在线| 日本五月婷| 亭亭色网| 日本欧美成人片AAAA| www.五月天社区| 99免费偷拍视频| 91久久婷婷| 五月丁香WWW| 91久久九| 26uuu日韩| 欧美综合五月丁香五月天| 任你干嘛免费视频播放| 思思热这里只有精品| 噜噜噜色噜噜| 激情久久久久久久久久久| 99视频精品| 五月丁香六月婷婷视频| 婷婷伊人綜合中文字幕| 九九色婷婷Av| 五月天激情小说| 精品国产va久久久| 五月六月婷婷激情网| 五月婷婷色在线| 综合色影| 99r这里| 99久在线精品99re8| 97在线观视频免费观看| 欧美六月| 五月丁香六月婷婷综合网站| 第四色色六月色综合| 丁香婷婷六月| 青青青在线视频国产| 丁香婷婷六月| 激情婷婷五月天在线观看| 久久刺激网| 乱乱av| 色丁香五月婷婷| 久久免费视频62| 丁香五月香蕉在线| 久艹大香蕉| 99久久婷婷国产综合精品电影| 九九色99| 五月天综合久久| 久久996re热这里只有精品无码| 99久re热| 激情婷婷五月天丁香| 性爱久久| 九九在线精点品| 综合婷婷五月天| 久久66精品| 激情五月天久久丁香| 久久99久久久久久久噜噜| 成人片黄网站色大片免费毛片| 玖玖综合网| 狠狠草狠狠草| 久播影院免费观看电视剧大全最新网| 婷婷九月激情网| 99色色爰| 丁香婷婷久久 | 亚洲AV色婷婷人禽五月天| 精品色情一区二区三区四区| 五月婷婷av| 国产免费一区二区三州老师F1F1……| 国产一级黄色影片,| 亚洲精品一区中文字幕乱码| 色五月五月婷婷| 人妻激情综合| AV在线观看网站| 色综合久久五月天| 婷婷淫淫狠狠六月| 五月天开心激情综合网| 婷婷精品性视频| 五月天色在线| 久香草视频在线观看| www.激情在线| 玖玖伦理电影| 五月婷免费视频久久久| 激情五月综合色婷婷| 激情五月婷黄版| 成人精品在线| 免费AAAAA网| 成人在线网| 91黄址| 玖玖爱综合网| 91性高潮久久久久久久久| 久久久久久99精品无码| 五月婷啪| 日韩啪啪网| 操操碰| 丁香五月天AV在线| 亚洲天堂亚洲色色色| 无码一区二区日韩| 插少妇综合网| www.亚洲激情| 99热在这里只有精品| 天天操天天操天天操天天操天天操天天操 | 99热爱爱干干日| 玖玖爱综合网| 深爱综合网| 婷婷社区五月天| 欧美成人精品A片免费一区99| 涩综合婷婷| 久久婷婷五月天| 国产精品国产成人国产三级| 草草色情综合网| 97涩婷婷| 五月天婷婷綜合院| 日本va欧美va欧美va精品| 天天肏屄夜夜爽| 丁香五月综合福利视频导航| 99九九精品视频| 日本狠狠网| 午夜成人天堂久久无码日韩久久| 亚洲精品视频在线播放| 日韩二区搞逼插逼毛片| 激情久久网| 精品婷婷| 亚洲国产精品成人va在线观看| 久久久精久人妻| 激情五月天小说| 色你久久| 日产精品久久久久久久蜜臀| 色综啪啪| 五月婷婷性爱| 丁香六月视频免费观看| 97色97干| www.色五月| 婷婷五月天丁香综合网| 任你日视频| 99re思思在线视频| 五月婷婷激情久久| 99热在线只有精品| 五月天婷婷激情六月久久| 精品人妻在线| 五月婷婷色男女| 久草五月天| 久久婷婷五月天懂色| 国产成人精品一区二三区熟女在线| 亚洲丁香婷婷| 精品久久99| 激情九九综合网| 婷婷丁香色情| 丁香五月婷婷激情四射深爱激情| 狠狠爱婷婷| 亚洲日韩26uuu| 亚洲色图五月丁香| 日韩专区五月天婷婷丁香| 97碰久久| 天天色,天天日,天天做| 狠狠操狠狠操| 日韩国产在线免费观看| 五月丁香花伦理电影| 久久九九国产精品怡红院| 久久99综合| 极品另类| www.夜夜.com| 99久久婷婷国产综合| 午夜福利8055| 激情亚洲色图片丁香综合| 五月婷婷日| 天久综合91综合首页| 欧美婷婷日本| 婷婷激情视频欧美视频自拍视频欧美剧| 丁香婷婷社区| 久久WW| 我要看激情五月天| www.狠狠| 色婷婷视频| 九九这里有精品| 鲁鲁色五月| 五月天色色网站| 激情五月天电影| 成人美女网| 丁香六月婷婷激情综合| 日本美女上人| 91丨九色熟女丨首页| 激情二色月| 夜夜爽天天爽| 91丨九色丨43老版熟女| 色五月婷婷91| 91岛国片| 538在线精品| 五月婷婷丁香日韩在线| 婷婷五月天AV激情| 久热这里| 五月丁香美女| 99精品热| 五月五婷婷网| 97色婷婷| 九九色逼| 久久久这里有精品| 三级三久久线久久99久目本WW| 天天爱天天狠天天透| 婷婷中文综合网| 伊人丁香花综合影院| 免费观看18视频网站| 亚洲 综合中文| 久久机热/这里只有精品| www.91在线观看| 激情五月丁香六月综合AVXXXX| 97碰操| 可以免费看的AV网站| 丁香五月激情综合久久| 开心五月深爱婷婷| 婷婷五月激情综合啪啪| 色五月天在线观看| 五月丁香趴趴| 欧美啪啪9| 国产熟女一区二区三区五月婷| jiuse91在线| 亚洲五月花| 狠狠久综合| 激情综合五月天| 另类激情码| 玖玖综合色| 五月婷婷六月丁香| 国产精品VIDEOSSEX久久发布| 色丁香六月| 婷婷久久爱| 亚洲五月色| a片在线免费观看一区| 五月花免费视频| 色色九九五月天| 曰曰久久| 丁香五月天激情五月天激情五月天激情网 | 91.www综合| 青青草原99热| 激情五月婷婷视频一区二区三区| 天天做天天爱天天高潮| 色999五月色| 99精品在线| 丁香五月激情婷婷激情| 99操不停| 九色视频91疯狂| 六月婷婷青青青视频| 精品人妻一区| 99久久婷婷国产综合精品草原| 99热这里只有精品中文字幕| 天天日天天做天天舔| 五月婷在线| 丁香婷婷色五月天| www. 五月. com| 亚洲美女高潮久久久久久69| 欧美成性色| 97久久婷婷色| 综合五月天| 香蕉婷婷色五月| 狠狠干最新地址| 色情五月婷婷| 俺来也综合网精品一区| 香蕉久久av一区二区三区| 这里只有精品视频99| 男女免费视频999| 丁香五月影院| 丁香六月婷婷综合在线| 五月丁香久久久久| 六月丁香五月婷婷| 操骚货在线| 99色视频| 五月天婷婷青青草| 99热亚洲| 色爱99| 极品九九九九九九| 日本色五月| 婷婷五月情天| 99综合视频一体| 九九热视频精品999| 欧美成人精品A片免费一区99| 99免费成人网| 九九久久偷拍| 天天肏夜夜肏| 久久激情网| 亚洲成色综合网站免费观看| 91xxxx九色| 国产精品涩涩涩视频网站| 国产午夜精品久久久观看| 久久亚洲婷婷| 99精品久久久久久| 激情婷婷五月天| 5月婷婷激情网| 久久婷婷五月综合激情国产| 亚洲综合五月天婷婷| 啪啪激情综合| 激情六月综合| 五月情丁香色| 九月激情网| 狠狠婷婷日韩| 内射人妻视频国内| 免费亚洲婷婷中文字幕| 91成人性爱视频| 99热成人精品| 操久久网| 一级黄色操B| 无码人妻AV久久久一区二区三区 | 怡红院精品视频久久久久久久久| 99视频内射三四| 人人操91色| 色和综合网| 色情婷婷五月天| 久久艹99| 成人精品亚洲性爱| 丁香5月婷婷| 丁香丁香激情网| 另类视频综合| 丁香五月综合久久| 影院久久久| 久久人妻熟女一区二区| 综合色播| 欧美内射AA| 色综合久久88色综合天天看| 五月天婷婷视频30| 五月天电影网| 五月丁香六月色情网欧美| 99色色热热| 97性视频| 9精品在线| 777久久久| 日本久久极品| 91狼友视频在线观看| 开心激情站| 深爱综合网| 99婷婷| 亚洲啪啪网| 五月天色色婷婷| 五月婷婷69| 色婷婷先锋| 亚洲视频丁香网va| 99九色视频在线观看| 五月天婷婷基地综合网| 日本天堂网站99| 久热精彩视频98| 日韩二区搞逼插逼毛片| 天天干天天日蜜臀av| 三男玩一女三A片| 亚洲亚洲人成综合网络| 亚洲无AV在线中文字幕| 国产精品第一国产精品| 99精品偷自拍| 色综色网| 超91热| 中文字幕天天干| 婷婷丁香五月天操逼| 五月婷婷www| 伊人久热91| 色情五月天丁香社区| 色婷婷五月天偷拍| 激情婷婷色色| 色5月婷婷| 九九视频这里是精品五月| 天天综合网91| 亚洲 综合中文| 另类在线| 乱女乱妇熟女熟妇综合网站| 九九热思思热| 久久99美女精彩视频| 熟女激情五月天| 99热首页| 色五月网址| 99色视频| 久久婷婷五月丁香蜜桃网| 久久加勤综合| 丁香五月先锋| 色情婷婷| 激情五月六月丁香| 婷婷五月天激情基地| 伊人玖玖婷婷| 看片视频在线免费日产在线看| 成人精品视频99在线观看免费| 4399啪啪视频| 色综合久网| 成人网站免费在线播放| 丁香五月婷婷少妇| 99成人无码| 玖玖婷婷色五月| AV九九| 婷色影院| 久久综合色情网站| 九九视频网| 亚洲99激情| 天天狠狠干| 午夜免费试看| 成人国产欧美大片一区| 色婷婷五月成人网| a网站免费观看| 欧美激情综合色综合色| 免费看欧美成人A片无码| 99这里只有精品视频| 成人国产欧美大片一区| 超碰不卡在线| 综合亚洲五月天| 色导航色婷婷五月天在线观看| 99久久婷| 亚洲无码影音| 99久久婷| 欧美va欧美va差| 亚洲视频二区| 天堂久热| 99啪啪视频| 六月丁香影院| 久久久97| 99热黄| 色九网| 无码人妻一区二区三区免费九色| 超碰免费人妻| 丁香五月天天久久综合小说| 99久久久免费| 99色 色| 五月天综合久久| 97人人操人人拍| 欧美丁香婷婷天天操| 99在线精品视频免费观看20| 天天色播| 夜色综合网| 热99只有精品| 91午夜激情| 91无码色色| 日日干五月天婷婷| 开心激情网五月天| Blackedraw视频一区二区| 五月丁香久| 五月丁香在线看| 久热91| 九九99九九99偷拍视频免费看| 这里只有九九精品| 大香蕉啪啪啪| 骚五月婷婷| 五月婷婷六月丁香在线视频| 日日夜夜干| 日本啪啪网| 九九激情| 国产99久| 五月婷婷色丁香| 久久五月天婷婷| 97欧美在线| 丁香五月天啪啪激情综和网| 欧美成人精品三区综合A片 | 成人无码精品1区2区3区免费看 | 丁香五月激情五月色综合| 人人干天天舔| 欧美操人| 婷婷五月丁香花综合| 久久99热这里只有精品| 色九九中文字幕| 久久er九九| 六月婷婷综合| 影音先锋色婷婷| 9l视频自拍九色9l视频在线观看| 色99最新网址| 五月天伊人手机在线播放AV| 夜夜操狠狠操| 色情五月丁香婷婷网| 99热都是精品| 日韩性视频| 婷婷的99视频网站| 国产亚洲网站在线| 丁香六月综合激情| 久久99免费视屏| 欧美丁香婷婷五月| 99精品成人无码A片观看金桔| 激情网战码亚洲A| 色色色色综合| 九九色中文| 精品色| 日本色色色| 99精品免费视频| 久久xxxx| 天天干天天拍| 99高级会所久久| 成人片在线播放| 久久99热免费| 成人做爰A片免费看视频| 色色99色色| 婷婷五月花| 性爱电影科技贸易有限公司| 久久色大香蕉| 色综合久久久久久久久五月| 日韩在线视频9色| 丁香五月天BBw| 色婷婷亚洲综合天堂| 国内精品玖玖| 91久久免费| 色狠狠999综合| 97碰| 久久久久9999| mmm1717.6dbm人人爱人人操| 久久小说网| 亚洲一区二区无码蜜乳av| 久在线综合69| 九九热精品99| 色五月婷婷基地| 1024人妻| 六月婷婷七月丁香| 久久婷婷桃花五月天| 开心深爱激情网| AV在线观看网站| 99视频内射三四| 无码G高清天| www.久操| 五月婷婷日| www.粉嫩av.com| 人妻久久久久久久 | 婷婷成人五月天| 婷婷丁香五月,狠狠综合| 99热黄| 9l视频自拍九色9l视频自拍九色9l社区 | 99热这里只有精品1025| 五月色婷婷在线观看| 无码AV免费精品一区二区三区 | 亚洲高清在线| 99热这里只有精品最新地址获取| 婷婷综合在线播放| 婷婷五月丁香五月| 精品成人无码A片观看香草视频 | 婷婷五月大香蕉| 超碰成人免费| 丁香五月五月婷婷五月天激情四射| 日本精品干| 五月婷在线观看| 这里只有精彩视| 狠狠色色综合| 少妇人妻人伦A片| 大陆肏屄视频| 久久永久视频| 丁香88AV五月婷婷| 亚洲综合五月天婷婷丁香| 97色色色色色色色| 91大操| 99热在线精品观看| 夜丁香五月婷婷| 色欲天天综合| 激情五月四色| 日韩aaaaa| 成人欧美一区二区三区在线观看| 婷婷色五月天色| 五月综合色| 岛国av网站| 五月婷婷六月丁香激情深爱| 综合久久8| 色色五月婷| 婷婷伊人五月天| 免费的日逼视频| 色情五月| 国产一二区爆乳_1国产日韩一区二区三-成人AV | 伊人干综合| 日本成人噜噜| 国产片天天爽夜夜爽| 色婷婷亚洲综合网站| 狠狠干,狠狠操| 亚洲人人操| 婷婷开心青青草| 影音先锋色婷婷| 天天肏在线视频| 人人摸人人摸| 激情视频综合| 思思久久99热只有频精品66| 久久狠狠欧美| 中文字幕激情综合| 大香蕉久久视频久久视频 | 色偷偷色婷婷| 一级片无码| 丁香六月婷婷综合| 丁香五月天网站| 99久久久| 色99最新网址| 丁香五月影院| 大香蕉精品视频| 狠狠五月天| 婷婷婷五月天最新综合你懂的| 五月婷婷无码| 亚洲AV免费国产电影| 羞羞嫩草视频| 在线18av | 激情久久久| 99热青青草| 九九综合| 操射国产日本| 国产26uuu视频| 五月婷婷啪啪| 97操视频| 色九亚洲| ...婷婷五月综合不卡,国产在线手机| 婷婷大香焦| 国产毛多水多女人A片| 五月天快乐开心激情网| 91九色精品| 天堂久久丁香| 99久久国产宗和精品1上映| 亚洲操操操| 色九网| 9|无码久久久久久| 91碰碰视频| 综合网激情| 欧美色婷婷| 26uuu亚洲| 色色综合网络| 五月第四色| 岛国av电影网站| 五月丁香久久丝袜啪啪| 日逼免费视频| 五月丁香成人| 一二三区视频韩国| 翔田千里无码| www婷婷亚洲| 色婷婷五月天激情综合| 婷婷免费无视频| 怡红院院在线导航网| 婷婷黄色五月天在线视频| 开心婷婷五月激情网小说| 无码一区二区三区四区五区| 99热 免费| a69在线视频| 久久五月丁香六月婷| 五月情婷婷五月| 色五月久久成人婷婷| 久久奄也去色色网站| 91网站黄| 久/久精品99看9| 99免费视频久久| 伊人婷婷青青cao| 九九爱这里只有精品| 六月丁香深深爱| 伊人婷婷激情| 夜夜爽天操| 丁五月激情视频免费| 亚洲无码色| 色综合综合色| 色五月av| 八戒青柠影视剧在线观看| 亚洲情综合五月天| 激情婷婷丁香| 五月开心啪啪| 丁香六月狠狠干| 婷婷综合激情| 国产69久久久欧美黑人A片 | 91操在线| 手机在线日韩视频中文字幕| 操碰99| 亚洲天天免费| 天天橾夜夜爽| 五月天色五月| 亚洲激情五月| 九九一区| 久久香视频| 亚洲区视频| 婷婷丁香六月激情综合| 亚洲最大五月六月丁香婷婷| 丁香五月婷婷五月天| 激情五月婷婷网| 国自产拍偷拍精品啪啪一区二区 | 日韩av网站在线观看| 91色久| VA婷婷| 色婷五月天综合网| 97香蕉碰碰人妻国产欧美| 亚洲av网站| 色欧美一级| 久久九九99桃花视频| 综合激情婷婷| 91小黄书网址在线观看| 超碰人人操| 五月婷婷六月色| 九九九AAA热视频| 99精品在线| 丁香五月激情澎湃一区| 久久五月天色婷婷| 欧美日韩中文国产一区发布| 五月激情久久| 天天婷婷综合| 五月色影院| 激情五月丁香五月| 第四色色色色色丁香五月天| 久久综合激情| 开心五月婷婷在线| 九九综合九九| 国产亚洲AV人片在线| 岛国资源站| 婷婷五月天av网| 五月婷婷六月丁香在线视频免费在线观看| 日熟女| 国产性av| 99热伊人| 五月激情小说网| 伊人五月天| 狠狠爱夜夜| 五月天成人手机在线视频| 五月婷婷草| 五月天丁香婷婷网| 亚洲成人在线播放| 操操操AV| 亚洲妇女熟BBW| 色色丁香婷婷综合| 久久视频九九视频| 26uuu精品国产| www.99热这里精品| 久久婷出差欧美色两性综合网| 欧美激情综合色综合啪啪五月| 午夜伊人大香蕉| 日本久久天堂| 五月天色不卡| 婷婷丁香91综合| 99干日本| 午夜色丁香| 国产肥白大熟妇BBBB视频| 超碰二区| 婷婷五月深深爱| 国产精品久久久久久久久久| 久久婷婷啪啪视频| 婷婷丁香人妻天天| 青青久在线视频免费观看| 日韩操人| 色五婷婷在线视频| 最新婷婷五月丁香| 激情五月婷婷在线区| 狠狠干无码| 综合久久五| 丁香伊人激情| 99在线观看| 欧美久久婷婷| 91日视频| www,色综合| 5月丁香六月婷婷| 免费视频WWW在线观看网站| 婷婷五月丁香综合| 激情五月丁香六月| 爱射综合| 九月影院義母在线播放| 色色色在线观看| 超碰色天堂| 天天干天天射色综合| 怎么样可以看免费的一级av| 国产精品久久99| 婷婷久久图片| 五月色丁香激情| 成人国产欧美大片一区| 国产乱码久久| 久久综合干| 日韩啪| 182TV大香蕉| 95精品区一区二| 五五月五月| 青草视频在线观看视频| 六月丁香基地| 色五月激情| 99re这里只有精品99| 97av在线视频| 亚洲色图45p| 激情综合网五月丁香| 婷婷射综合| 色婷婷操逼| 99在线免费视频| 久热超碰91| 91精品国产99久久久久久天美| 国产精品日日躁夜夜躁| 外国碰视频网站97| 91se在线观看| 亚洲无线视频| 色色色色色色色色综合网| 婷婷六月啪啪| 欧美性爱五月天| 丁香五月另类小说在线阅读| 亚洲亚洲人成综合网络| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 婷婷五月丁香91| 超碰国产AV| 婷婷久久久久| 婷婷深爱五月天| 五月天欧美 另类小说| 日本不卡高字幕在线2019| 日韩无码人妻一区二区三区综合| www.seqingwuyuetian| 无月播播激情在线观看视频| 丁香五月停停av| 五月天国产| www婷婷| 激情图片五月天| www.色婷婷。com| 丁香五月 性爱| 日韩黄色电影| 黄色片区子| 91九九| 丁香久久久| 91丨九色丨熟女|老版| 五月婷精品| 久久激情综合| 97色综合| 五月丁香成人| 99热99成人| 日韩久久系列| 亚洲综合另类| 丁香六月婷婷综合色| 99ER热精品视频| 九九热99热| 操一区| 久久久婷婷五月天| 美女五月天| 六月色色| 日本操B视频| 99热在线精品观看| 五月天婷婷爱| 蜜臀AV在线观看| 天天日天天爽夜夜爽| 婷婷五月色情| 激情综合五月| 新激情五月天色播| 婷婷少妇激情| 亚洲激情五月| 丁香五月激情澎湃一区| 99人妻碰碰碰久久久久视| 色综合色色| 开心亚洲久久开心| 无码A片一区二区免费| 九色婷婷| www,天天干| www一起操| 国产真实乱了老女人视频| 激情婷婷五月天| 五月在在观看| 久久九九@| 精品夜夜澡人妻无码AV|