99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

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片| 一区二区成人电影免费播放| 日逼免费视频| 五月天激情综合网俺也去| 久热久| 第四色婷婷色五月| 亚洲精品欧洲精品| 五月花婷婷在线精品视频| 丁香花综合永久入口| 91视频精品99| 99亚洲精品| 五月天激情在线视频| 99超碰人人| 色色色综合网| 99无码| 开心激情网在线| 欧美噜噜久久久XXX| 色色色色色色色色色色色色色五月天| 婷婷综合中文字幕| av操逼网| 亚洲九九在线| 婷婷六月天精品| 久久9热| 亚洲人成网站999综合| 色婷婷基地| 桃色激情网| 色综合色综合色综合高潮| 色情五月| 亚洲黄3级片网站欧美| 国产日产亚洲系列最新| 无码免费人妻A片AAA毛片西瓜| 琪琪色五月天| 国产激情视频在线观看| 色墦五月丁香| 婷婷五月天成人| 婷婷五月激情欧美| 久99久视频| 色综合中文| 五月天综合婷婷| 99热综合在线观看| 国产色五月| 天天插天天很| 亚洲经典小视频| 日韩狠狠色婷婷| 开心五月婷婷五月| 婷婷五月丁香婷婷| 操人妻视频91| 99九九在线精品热动漫| www,天天干| 五月丁香啪啪| 国精产品一区一区三区免费视频 | 五月天激情图片| 五月天婷婷在线AN| 女婷久久| 99国产精品白浆在线观看免费| 粉嫩AV久久一区二区三区| 六月婷婷五月丁香| 婷香五月| 538任你爽| 婷婷亚洲综合| 欧美成人AAA片一区国产精品| 久操婷婷| 丁香五月伊人| 9 99免费视频| 婷婷五月丁香狠狠| 噜噜网免费视频| 五月婷婷之综合激情| 天天干天天操天天拍| 五月丁香啪啪伦理电影| 91ncom.色| 五月丁香综合在线| 亚洲成人av在线观看| 中文字幕久久婷九女同| 国产成人+综合亚洲+天堂| 婷婷丁香五月亚洲欧美| 久久激情五月网| 深爱五月网| 色色色热热热| 怡红院AV亚洲一区二区三区H| 亚洲综合五月天婷婷| 亚洲午夜国产成人电影VA国产欧…| 开心久久网婷婷| 久久最新色| 五月婷婷久久久| 日本女天天爽| 123草逼网| 激情五月天综合网| 99免费青青蜜臀| 色碰干| WWW.99热| 色婷婷五月天激情在线观看| 大功率国产在线| 婷婷五月激情热播| 色五月激情网| 五月激情四射网站| 99在线观看视频免费| 色婷婷丁香特级性爱视频| 五月天精品综合| 日本婷久久| 丁香五月婷婷啪啪| 激情丁香九九五月综合网| site:xmssd.com| 五月天电影网| 99综合网| 天天爱天天日| www.丁香五月| 五月丁香网站| 五月激情站| www.色婷婷.com| 五月丁香亚州综合网| 成人av在线电影| 色色色色色色综合| 国产亚洲精品久久久久久郑州 | 思思99热热热99| 丁香五月六月婷婷殴美综合| 婷婷五月天性色| 欧洲一区二区| 另类小说色婷婷| 色婷婷成人做爰A片免费看网站 | 婷婷五月综合婷婷| 2021日韩无码| enecarbon-materials.com污K127封锁请涟系@wip1688 | 丁香五月手机在线| 亚洲精品白浆高清久久久久久| 日本一级大片| 五月婷婷二月丁香| WWW.桔色成人.COM| 无遮挡国产高潮视频免费观看 | 日本片日本片祼观看网站在线看中文版网页在线看 | 婷婷久久五月| 狠狠色色综合| 蜜臀av粉嫩av懂色av| 成人超碰网| 亚洲精品网站色视频| 日本婷婷五月天| 久久A极片| 欧美激情五月天婷婷| 五月天婷婷免费| 超碰自拍天堂| 国产亚洲色婷婷久久99精品91| 九九99九九精品免费 | 婷婷开心激情| 大伊香蕉玖玖爱| 蜜乳中文字| 亚洲精品V天堂中文字幕| 亚洲精品网站色视频| 色天堂在线| 婷婷狠狠狠爱| 大香蕉五月丁香| 久久综合色五月| 曰日爽日日操| 玖玖婷婷色| 天天狠狠夜夜狠狠2023| 亚洲欧洲午夜成人精品av| 丁香五月婷婷色播艳门照| 怡红院AV亚洲一区二区三区H| 狠狠色婷婷在线| 色爱综合网| 婷婷六月综合激情| 久久久激情视频| 久操97| 婷婷综合亚洲| 激情色播| 色女伊人| 九九99免费理论| 久久精品4| 久久色天堂| 狠狠久久婷五月| 六月丁香大香蕉| 五月停停色色丁香| 欧美va视频不用播放器的va视频网| 婷婷午夜| 天天插天天插天天插天天插| 九色自拍| 五月婷婷视频| 激情四射婷婷| 久久婷婷五月丁香| 香蕉婷婷色五月| 狠狠色婷婷777| 九九热这里有精品视频| 五月天婷婷网站| 久草热在线视频| AA久久| 色偷偷五月天| 色亚洲欧洲| 九月激情综合| 五月停性愛| 激情五月婷婷开心网| 丁香五月手机在线| 天天综合网~91| 欧美成人va| 爱性综合网| 少妇人妻偷人精品无码视频新浪| 亚洲第一综合| 婷婷之六月丁香| 欧美日韩成人在线网| 亚洲永久免费| 激情综合网五月激情网| 五月婷伊人| Av中文在线| 五月婷婷激情日本| 99热这里只有精品最新地址获取| www激情| 精品影院| 九月色婷婷| 婷婷激情丁五月| 97超级碰碰碰| 婷婷五月综合基地| 国产成人精品一区二三区熟女在线| 亚洲视频伍月婷婷| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 五月停停丁香| caopeng超碰| 色欧美日| 色色色色丁香| 国产婷婷色综合AV蜜臀AV | 影音先锋91资源站| 婷婷五月草| 婷婷五月成年人| 免费V片在线| 91九色网| 国产在这里只有精品| 色噜噜,噜噜色| 无码激情| 国内久久亭亭| 久久女人九九| 伊人大香久久| 俺去婷婷 丁香| 亚洲日本韩国| 久久久天堂国产精品女人| 波多野结衣AV无码Porn| 色屌丝中文字幕| 玖玖精品视频99| 色一情一乱一乱一区91| 99玖玖在线视频| 99ri网站在线观看| 黄色片avv| 久久婷婷亚洲| 99热亚洲| 久久草大香蕉| 激情五月婷婷| 亚洲亚洲人成综合网络| 狠狠操狠狠爱| 精国产品一区二区三区A片| AA丁香综合激情| 99性色| 激情五月婷在线精品| 激情精品久久| 日韩AAA| 99综合色色色| 九九成人高清视频| 激情伍月 欧美| 在线观看熟女少妇| 天天天天天色| 伊人狠狠操| 色丁香综合影院| 天天爽—爽| 99er这里只有精品视频| 九月婷婷综合八月丁香在线观看| 婷婷成人在线| 思思久久青草热| 激情狠狠丁香月| 夜夜做天天爽| 夜夜撸天天操| 婷婷五月AV| 91成人视频| 玖玖婷婷综合| 五月天色综合| 91精品久| 久热99| 九九碰九九爱97超碰| 99re热精品在线视频| 久热超碰| 国产成人va在线| 5月丁香六月婷婷| 热99AV网站| 欧美黄色AA片哗啦啦啦| 91热久久| 夜夜操加勒比| 五月天三级久久| AV在线大香蕉| 色五月激情综合| 日韩综合大黄| 日韩性视频| 99热这里都是精品| 91人人人人人人人| 色综合久久44| www 五月天 com| 激情5月婷婷| 99久精品视频| 精品国产一区二区三区四区阿崩| 日韩操女| 天天色,天天操,天天射| 碰97久久| www.9操| 91综合网| 最新热中文字幕| 99精品久久久久久久婷婷久久| 日韩五月丁香| 婷婷五月天社区| 91国产精品视频播放| 综合色网站| oumeisesewang| 激情小说视频图片| 狠狠干综合| 九九久久污| 激情深爱综合| 色色色综合| 99热精品在线观看| 天天色天天射天天日| 综合激情综合啪啪| 天天干 夜夜爽| 桃色五月婷婷| 91免费在线视频6| 五月天激情丁香| 九九综合久久| 色婷婷综合网站| 亚洲久久婷婷| 无码免费人妻A片AAA毛片西瓜 | 色V狠狠的干| 丁香五月六月激情| 极品人妻VIDEOSSS人妻| 中文AV在线播放| 六月婷婷九月丁香亚洲综合| 最近中文字幕2019视频1| 丁香六月综合激| 99er这里只有精品| www色色色com| 综合激情在线| 色婷婷久久| www.色五月| 成人在线视频网| 丁香激情综合| 精品九九久久| 久久婷婷丁香六月天| www.婷婷五月天| 成年视频免费观看| 婷婷性色| 亚洲天堂九九九| 狠狠操在线视频| 思思热99热| 久久久久99精品成人网站| 五月丁香六月婷婷玖玖| 欧美人与性动交CCOO| 99热免费精品| 色色五月丁香婷婷| 久久婷婷网| 五月天啪啪啪| 色婷婷综合影院| 日韩十国产极品久久| 五月婷婷六月色| 欧美日综合| 99人妻碰碰碰久久久久视| 91丨九色丨国产打屁股网站| 狠狠草狠狠草| 亚洲成人另类| 久久久8| 午夜九九九九九九九九九九九九九| 色婷婷丁香| 日韩aⅴ视频| 天天爽综合| 婷婷五月综合国产精品| 色性五月天| 婷婷香蕉精品| 香蕉AV777XXX色综合一区| 蜜臀综合久草| CAOBIBI| 无码色色| 五月天久久网站| 婷婷狠狠97| 亚洲激情综| 日本啪啪天堂| 欧美综合婷婷欧美综| 免费无码毛片一区二区A片| 激情五月综亚网| 色欲一区二区三区精品A片| 99热欧| 丰满少妇猛烈A片免费看观看| 五月丁香婷婷AV天堂| www.色婷婷| 婷婷伊人激情婷婷| 婷婷六月久久| 中文字幕成人| 91大屁股| 另类伊人婷婷| 五月天开心网| 丁香五月Av| 超碰成人av| 婷婷丁香久久| 综合综合网| 97艹| 国产午夜精品一区二区三区嫩草| 亚洲日韩欧美综合VA| 91久久精品无码一区二区三区| 狠狠干婷婷| 五月天婷婷色播| 热99热久| 人人操AV| www.激情五月| 丁香五月综合图片在线观看| 97超碰欧美中文字幕| av网址在线| 五月婷婷六月激情在线| 夜夜AVV| 婷婷在线视频| 五月天天爽| 婷婷五月天久久| 亚洲精品久久久无码| 深爱激情婷| 五月五婷婷网| 亚洲av网址| 99热最新| 涩涩五月天| 婷婷激情五月天在线视频| 日韩精品在线观看9| 99热综合色图| 婷婷五月丁香久久| 色婷婷XXXXX| 丁香五月激情五月| 开心五月婷婷激情| 久热久| 天天爽天天干天天| 激情五月丁香在线观看直播| 激情五月天色网站| 91精品国产综合久久蜜芽解析速度| 99热九九热| 色婷婷五月天偷拍| 六月色色婷婷| 国产伊人五月天| 国产精品人妻在线网址| 99碰碰。| 九九亚洲天堂| 亚洲国产精品VA在线看黑人 | 五月婷婷视频啪啪美女| 色亚洲无码| 99热综合色图| 夫妻超碰在线| 黄色中文字目| 亚洲国产精品SUV| 午夜一区| 免费亚洲婷婷中文字幕| 97欧美在线| 91人人爽久久涩噜噜噜| 亭亭五月天成人| 久久五月天婷婷视频| 亚洲99在线| 婷婷综合玖玖五月| 性爱激情综合网| 超碰人人在线| 五月天婷婷久久| 久99视频在线观看| 日本久久婷| 六月激情网| H亚洲| 伊人综合网站| 任你躁XXXXX麻豆精品| 噜噜噜久久| 国产操碰| 综合激情站| 婷婷五月天综合网| 九月丁香亭亭| 五月天婷婷综合| 大香蕉520| 日韩AV片| 五月天激情图片| 久久激情视频| 五月天综合| 婷婷综合激情| 婷婷五月激情黄色| 丁香婷婷五月天成人| 碰碰碰97国产| 一区二区三区四区牛| 丁香五月色激情| 色啦啦视频| 亚洲av另类在线观看| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 国产精品99久久久久久久女警| www.夜夜| 在线观看免费观看在线9久| 国产精品久久久爽爽爽麻豆色哟哟 | 五月婷婷之综合激情| 亚洲精品大片| 成人做爰黄A片免费看直播室男男| 99精品偷自拍| 香蕉中文在线| 日本久久天堂| 五月停停丁香| 综激情网| 亚洲亚洲人成综合网络 | 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 在线不卡视频| 丁香欧美| 五月婷久久| 亚洲色五月| 九九色插| 婷婷久久综合| 五月婷婷啪啪啪啪| 超碰99热| 狠狠爱丁香婷| 激情婷婷| 亚洲天天| 99热这里只有精品99| 婷婷天堂伊人| 婷婷丁香69精华| 丁香激激情网| 天天干天干| 婷婷五月丁香激情| 亚洲成人免费在线| 久久久精品色色色| 六月 丁香 视频| 丁香六月丁香婷婷激情| 青青草色在线视频观看| 五月丁香色婷婷基地| 天天爱天天做天天操| 九九免费视频| 婷婷丁香人妻天天爽| 五月天丁香成人| 99综合免费视频| 久久婷婷七月丁香| 综合色情网| 亚洲激情区| 91久久九久久九久久九久久九久久 | 欧美特大片黄| 五月色综合网欧美网| 国产精品色一哟哟| 久久婷婷五月天| 无码AV大香线蕉伊人| AV电影在线播放| 密桃激情五月天综合网| 可以看的av| 男人天堂AV在线一区二区| 五月丁香婷婷无码中文| 久久3级片| 久草大| 五月天激情www| 五月综合久久| 97黑人精品区| 亚洲这里只有精品| 无码AV免费精品一区二区三区| www色婷婷com| 五月丁香基地| 亚洲经典三级| 免费在线a| 思思99re这里只有| 三级三久久线久久99久目本WW| 色综合av超碰| 久久综合天天综合| 中国女人做爰A片| 美日韩成人| 日本狠狠干| 婷婷丁香九色| 99热777| 99爱在线视频| g00d人体西西| 五月天色婷婷综合| 97超级免费无码| 色五月成人在线| 99综合视频一体| 成人 在线 日韩| 99噜噜| 超碰色天堂| 五月激情综合婷婷| 国产国产乱老熟女视频网站97| 日韩成人无码人妻| 99干日本| 91丨九色丨熟女| 天天操天天操天天操天天操天天操 | 天天综合色| 激情久久月| 99热只有这里才是精品| 丁香六月婷婷色XXXX| 婷婷色无码| 久草热在线视频| 五月天激情四射| 99九九综合久久九九| 蜜桃婷婷狠狠久久综合| 天天色天天日天天舔| 91在线人| 久色资源| 99黄色性生活| 碰碰91| 婷婷丁香五月激情| 六月丁香激情综合网| 香蕉久久国产AV一区二区| 久久精彩综合视频| 一起草AV| 亚洲 无码 中文字幕 中出| 日韩黄色中文字幕| 丁香五月婷综合网| 亚欧州精品视频| 亚洲综合五月天婷婷丁香| 九洲一级A片| 玖玖精品视频| 五月综合777| 开心激情网五月天| 五月婷婷激清网| 1024久婷| www.五月丁香| 亚洲综合婷婷| 婷婷激情四射五月天| 99操视频| 五月婷庭丁香在线| 99久久97久久欧美综合网| 秋霞A V毛片| 99久热| 碰99在线| 久青操| 日操| www一起操| 丁香午夜天| 婷婷在线免费| 亚州操逼网| 丁香六月天| 天天摸天天日天天舔| 五月天婷婷激情在线色图| 9久精品| 66精品成人免费网站在线观看| 99色久| 欧美性做爰大片免费看办公室| 久久九九在线视频| 激情久久五月天| 九九色婷| 五月天激情四射| 日韩AV色色色| 色婷婷五月在线| 亚洲色碰| 伊人喵咪a V| 婷婷五月精品中文字幕| 亚洲色综久久五月| 超碰在线成人| 九九热99久久99| 中字幕视频在线永久在线观看免费| 久久视频在线| 就爱啪啪婷婷| 九九久久99精品免费观看www| 狠狠色婷婷7777久| 婷婷综合网| 色婷婷精品小视频| 九九热在线观看6| 视频一区二区在线| 久久婷婷精品| 亚洲综合99| www.minyis.com【JT】实力收量可预付QQ2101460746 | 综合亚洲六月婷婷在线| 人人插9| 琪琪理论片| 99九九久久| 五月丁香啪啪网| 色9999日韩国产| 欧美影院| 香蕉久久国产AV一区二区| 婷婷激情五月天网站| www.超碰在线| 婷婷色丁香五月| 成人一级片| 中文字幕五月久久婷| 97色色色| 婷婷狠狠97| 色色色无码| 一区二区三区XXXXXX| 少妇人妻综合色6699| 人人操人人妻| 啪啪亚洲综合| 日韩AV在线免费| 激情五月丁香六月综合AVXXXX| 97搞在线| 丁香五月天色婷婷| 婷婷亚洲久久| 第四色首页| 婷婷综合九月| 亚洲综合在线播放| 丁香色六月| 狠狠穞A片一區二區三區| 欧美日本综合网| 婷婷五月婷婷| 欧美成人热| 八戒青柠影视剧在线观看| 丰满老熟妇BBBBB搡BBB| 成年人99热| 日本三级第一页| 天天色,天天日,天天做| 亚洲综合草草| site:pnnrt.com| 婷婷丁香五月天小说| 亚洲色图欧美色图日本视频| 成人电影丁香六月天| 五月天婷婷色色首页| 五月天婷婷在线视频| 自拍偷窥99热| 狠狠色综合网| 天天干天天色天天干| 婷香狠狠爱五月| 成人在线综合| www.日日日.com| 五月天大香蕉av| 天天爽天天操| 丁香色五月婷婷17C| 熟妇无码乱子成人精品| www.henhengan| 丁香五月天.com| 天天干天天拍| 久久人妻伦理| 九九热精品| 无码少妇高潮喷水A片免费| 婷婷综合网站| 五月丁香啪啪激情| 这里只有精品视频在线| 久久99热在线观看| 色视频2025| 日笨久久网| 任你爽视频| 亚洲五月天伊人| 97干视频在线| 成人精品视频99在线观看免费| 欧美日韩AAAA| 天天做天天爱高潮片| 天天综合区| 五月婷婷啪| 亚洲综合婷婷五月| 九九性视频| 亚洲操女| 丁香婷婷色五月| 婷婷丁香五月在线播放| 丁香六月狠狠| 丁香视频| 五月天开心网| 色五月天成人| 五月天婷婷在线观看精品男人| 丁香激情久久| 激情五月综合色婷婷| 色五月婷婷91| 91麻豆国产三级精品福利在线观看| 久久婷婷综合网| 深爱激情av| 99操视频| 欧美色97| 亚洲中文字幕翔田千里| 伊人91| 伊人网啪啪| 欧美婷婷色五月| 只有精品视频在线观看| 日本一毛片| av五月天婷婷丁香| 超碰在线看| 色欲丁香| 天天干天天干天天干天天干天天干| www.五月激情.com| 国产99久久久| 大香线蕉伊人| 韩国97天堂| 久久性爱99国产| 婷婷亚洲五| 国产成人av在线播放| 玖玖综合色区在线观看| 公的粗大挺进了我的密道 | 婷婷久久色| 色色五月婷婷狠狠| 丁香五月欧美| 日日天天干| 五月婷婷|欧美| 九九婷婷网五月天| 色色色色色爱| 天天干天天射综合网| 激情丁香婷婷五月天| 天天色月| 久久婷婷亚洲| 99男人天堂| 五月婷婷导航| 91色欲综合| 色色色色色日韩午夜激情| 91 欧美| .精品久久久麻豆国产精品| 狠狠色婷婷7777久| 色色色9| 五月婷婷啪啪啪| 久久久99视频| 99热99极品观看| 色色色成人网| 丁香五月婷婷激情蜜桃| 亚洲人人操BD| 婷婷丁香激情综合色情| 免费播放99性爱视频| 天天综合色99| 操婷婷基地| 大香蕉 伊人夜| 狠狠色综合网站久久久久| 五月丁香趴趴| av成人在线播放| 91色吧网| 国产精品操| 99ri在线| 99久久精彩视频。| 日本色婷婷久久99精品91| 欧洲精品欧洲情| 久久曰曰| 五月色 亚洲| 四虎婷婷五月天| 亚洲 五月 婷婷 成人| 天天插天天| www.色五月.com| 成人色五婷婷| 综合久| 五月天成人综合| 风流少妇A片一区二区蜜桃| 内射在线CHINESE| 五月天啪啪网| 五月婷婷色白丝| 九九热自拍| www.久久久久| 九九在线免费观看| 中文字幕婷婷五月天在线观看| 99久热这里只有精品| 久久久久人妻| 丁香五月天视频| 国产肥白大熟妇BBBB视频| 丰满少妇猛烈A片免费看观看| 五月婷婷av在线| 农村熟妇高潮精品A片| www.99操| 亚洲小电影在线观看黄999| 婷婷丁香五月天哟啪| 国产日批视频| 欧美激情综合五月色丁香| 五月天天天天天天天天天天天婷婷婷| 97精品综合| 婷婷五月天成人| 大香蕉太香蕉视频97| 26.uuu丁香五月婷婷| 六月婷婷之青青草| 五月综合六月婷婷| 九九99精品| 中文幕无线码中文字蜜桃| 丁香六月综合激| 人人操日| 五月婷婷人妻| 色综合九九色综合88| www色色com| 97综合视频在线| 五月丁香亭亭A片| 美女黄频aⅴ视频| 久草婷婷网 | 男人天堂AV在线一区二区| 婷婷六月啪啪| 人妻自慰高清合集| 成人婷99最新| 1级欧美日韩| 婷婷在线综合| 思思热国产在线| 草一草avb| 91在线97视频| 亚洲欧美成人在线| 婷婷5月九九| 丁香六月激情综合| 亚洲成人在线观看网址| 思思热久久阴99| 99热这里只有精品99| 99视频在线| 香蕉网久久| 六月婷婷日| 亚洲成人AV在线观看| 精品爱欲五| wwwss在线观看| 婷婷五月天激情AV影院| 99热精品在线播放| 91主播在线| 日本熟妇人妻在线| 九月丁香亭亭| 另类国产区| 日批在线看| 欧美成人精品A片免费一区99| 欧美婷婷色五月网| 99热这里精| 操碰97| 偷拍91九色| 久久机只有这里精品| 亚洲热综合| 日本97久久久精品| 久久黄色网扯| 色色色热| 日本操B视频| 在线五月婷婷小电影| 饮料下药迷倒漂亮女同事强干| 新激情婷婷| 开心 五月 综合| 九九免费视频| enecarbon-materials.com污K127封锁请涟系@wip1688 | 91av成人| 情婷婷五月天在线| 思思热这里只有精品| 五月天婷综合| 26uuu国产| 人碰人人人玩91| 亚洲 小说 欧美 激情 另类| 久久婷婷视频| 久久婷婷五月综合97色一本| 色色综合激情| 狠狠色大香蕉| 久久婷婷五月综合伊人| 激情五月天。| 中文人妻主播久久| www.minyis.com【JT】实力收量可预付QQ2101460746 | 青青色com久久| 激情WWW| 欧美性猛交XXXX乱大交极品| 国产韩日亚洲美州欧亚综合在线| aa久久| 色狠狠综合入口| 爽天天天天天天天| 秋霞网在线免费基地五月婷婷丁香| 96五月丁香熟女| 综合久久激情久久| 婷婷伊人五月| 人人操婷婷| 99r这里| 久热精彩视频98| 停停五月天激情网| 97涩婷婷婷婷基地| 色色网站免费| 四季AV综合网| 狠狠爱婷婷丁香| 91色色色18| 91无码视频| 久久婷综合| 99热这里只有精品16| 色色日韩| 婷婷亚洲天堂| 五月天婷婷色播在线网| 日韩二区搞逼插逼毛片| 六月婷婷激情小说网| 草榴成人影片| 亚洲热热视频| 啪啪综合| 久热这里只有精品99re | 无码任你操| 91中文在线| 成人精品视频99在线观看免费| ...婷婷国产成人亚洲日韩| 婷婷99狠狠躁天天久久久九九九| 丁香六月天婷婷色| 久久精99| 精品人妻久久久久久| 五月丁香婷婷综合久久| 天天综合在线网| 婷婷丁香五另类网站| 色婷婷呢狠禁久禁| 激情综合激情综合| 婷婷丁香五月天综合AV| 丁香五月天激情综合| 午夜婷婷六月天| 日日噜噜久久婷婷五月天| 99九色视频在线观看| 色狠狠五月天| 婷婷五月丁香综合网| 久久婷婷五月天综合| 欧美色图天堂网色| 亚洲亚洲人成综合网络| 天天日天天日天天搞| 久婷久婷| 99热这里只有精品青草| 五月天在线视频尤物视频在线看| 99久久終合| 亚洲热热视频| 色婷婷五月婷婷五月婷婷五月| 99视频在线观看视频| 久久九九综合| www.五月天婷婷姐姐| 亚洲人人操| 色色色图| 综合色激情| 9久国产精品| 五月天激情中文字幕| 成人在线高清| 国产肥白大熟妇BBBB视频| 久99热| 久久婷婷激情| 五月婷婷碰碰| 久久多色| 久久开心五月婷婷| 激情四射婷婷| 丁香六月丁香婷婷激情| 99热主页日本| 五月丁香在线国产| 第四色五月婷婷| 色五月婷婷网| 五月丁香色婷婷色| 狠狠五月天婷婷| 性爱五月丁香| 玖玖婷婷免费| 91爱啪啪| 九九热视频精品| 异能之下短剧免费观看全集| 婷婷五月丁香99| 五月天激情亚洲| 人人干人人看| 亚洲天堂AAA| 六月色播| 1024在线观看免费视频| 99免费在线| 五月丁香婷婷AV| 亚洲亚洲激情| 欧美婷婷日本| 伊人久热91| 天天射影院| 婷婷五月天堂| 亚洲欧州色情在线观看| 久久色五月天| seuuu婷婷| 夜夜骑天天操| 激情五月丁香在线观看直播| 日日爱678| 性爱五月婷婷| 99A片| 国产精品人人做人人爽人人添| 婷婷五月色播| 严洲天天插| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | 丁香午月AV中文字幕| 91青娱乐青青草| 人人肏逼视频在线一区二区| 天天日天天爽| 五月激情六月综合| 婷婷丁香五月网| 这里有精品2| 伊人婷婷激情| 久色成人| 天天上天天爽| 丁香六月激情综合| 婷婷六月啪啪| 九色激情网| 五月丁香最新| 国产性爱色| 丁香五月婷婷av影院| 国产精品人人做人人爽人人添| 久久人操| 综合久久综合久久| 天天爱天天秀天天做| 婷婷激情小说| 这里只有精品免费视频| 婷婷激情五月综合丁| 人人干人人操人人摸人人做| 大香蕉久久伊人婷婷五月丁香| 99色热视频| 国产成人综合在线| 香蕉大综综综合久久| 91疯狂操操操操| a性生活久久无| 丁香五月狠狠在线观看| 五月天婷婷婷| 强辱丰满人妻HD中文字幕| 最近中文字幕2019视频1| 年轻的妺妺伦理HD中文 | 丁香婷婷AV| 日本色色色色色色色色一色二色| 日日影院 | 激情综合五月天| 裸体做A爰片毛片A片免费| 五月综合影院| 天天拍久久| 丁香社区婷婷五月| 99热99这里有免费的精品| 久久在线人妻| 这里只精品热在线18| 色色色欧美色色| 五月天激情社区| 久久这里只有国产视频| 噜噜噜久久亚洲精品国产品91| 五月婷婷啪| 99视频久久| 九九大香视频| 99精品视频网站| 182TV大香蕉| 丝袜大香蕉| 婷婷色六月| 精品亚洲国产成AV人片传媒| 亚州欧美黄色电影| 99热99日天天干| 久热丁香| 伊人五月天久久| 五月婷婷激情性爱| 少妇丁香婷婷| 五月在在观看| 桔色成人在线| 99久在线观看| 日日噜噜夜夜狠狠久久丁香六月| 99ER热精品视频| 国产欧美大香蕉一区| 狠狠色狠狠爱| 伊人久久婷婷| 色亚洲中文| 五月花综合视频| 91色噜噜狠狠狠狠色综合| 99综合免费视频| 亚洲精品久久久久AV无码| 无毒黄色网址| 九九人人自拍| 综合激情开心五月| site:ornaments52.com| 婷婷五月天视频免费在线观看| 67194国产| 五月天色色色| 变态另类色图| 综合激情婷婷| 99re这里只有精品免费| 99热这里只要精品免费| 五月丁香综合中文| 大香蕉综合网| 九九九九九九毛片| 欧亚洲在线高清视频| 激情综合另类| 在线中文字幕视频| 国产SUV精品一区二区6| 狠狠色大香蕉| 色五月激情问网站| 99性爱精品| 色999五月色| 丁香婷婷九月在线| 久久久久99精品成人网站| 思思视频这里是精品| 操逼棍操逼| 久久激情五月婷婷| 青青草99re| 丁香婷婷黄网站| 五月婷婷之美女图片| 亚洲免费婷婷| 色天使久久综合| 色九月婷婷| www99热| 日韩色色视频| 色婷婷91激情小说| 婷婷丁香视频在线观看免费| 这里只有精彩亚洲视频推荐| 婷婷色综合| 免费观看18视频网站| 性爱五月丁香| 可以直接看的AV网站| 激情婷婷丁香五月天| 狠狠一日| 色综合爽| 激情五月天 婷婷| 粉嫩AV久久一区二区三区| 五月丁香婷婷综合视频| 久久奄也去色色网站| 九九99精品| 久久99免费视屏| 色播五月婷婷综合| 中美日韩成人在线| 婷婷丁香婷婷97| 六月婷婷网| 变态另类9| jiZZdr| 五月天婷婷成人网| 五月丁香啪啪综合| 夜夜干 夜夜操| 99这里都是精品| 亚洲中文字幕AV| 综合色播| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 少妇久久诱惑视频| 亚洲av网站在线观看| 九九精品系列| 婷婷五月天首页| 久久综合五月天| 婷婷久久丁香五月| 五月婷婷av| 怎么样可以看免费的一级av| 六月丁香激情综合网| 久热69| 91seAV| 色人妻五月| 色五月激情五月| 日日噜狠狠| 五月婷婷激情| 爆乳熟妇一区二区三区爆乳| 五月婷视频| xxxx五月| 亚洲黄色影视| 五月丁香激情怕怕| 丁香五月六月| 婷婷字幕在线| 五月涩涩网| 三级毛片视频| 五月丁香婷婷无码中文| 激情综合婷婷| 超碰免费人妻| 日本99在线视频| 色九综合| 五月六月丁香激情| 人人操人人添人人摸97| 亚洲VA在线| 日韩ww| 丁香五月人妻熟女| 国产又黄又爽又色的免费| 第四色色六月色综合| 日韩另类| 人妻狠狠操| 性综合网| 综合激情开心五月| 天天天在线观看| 婷婷丁香五月天影院| 九月婷婷激情| 激情五月天的婷婷| 天天做天天爱| 久9热视频在线观看| 99热国内精品| 大香蕉狼人久久| 婷婷综合色| 亚洲综合字幕色色| 色播五月丁香| 丁香五月婷婷久久久| 噼里啪啦完整版中文在线观看| 色综合九九| 综合色色网| 九九热只有精品6| 日韩成人无码| 99在线看片| 狠狠色综合无线观看| 色停停五月,在线观看| 免费超碰在线| 97人人操人人| 丁香五月天激情网址| 亚洲五月婷| 五月丁香激情五月天| 欧洲亚洲激情五月天在线| 亚洲AV成人精品网站在线播放| 色区域网站视频| 激情国产综合| 激情六月丁香| 99视频内射三四| 色色99| 丁香六月无码播放| 九月av| 久久综合婷婷| 可以直接看的av网站| 欧美成综合在线观看| 九九成人| 超碰91在线| 亚洲中文字幕在线观看| 婷婷深爱五月| 久久五月激情综合| 99热在线观看| 婷婷五月天成人小说| 婷婷丁香五月激情密臀av| 99re6久热只有精品6在线直播| 99在线视频在线观看| 日韩有码久久| 变态另类9| 亚洲激情视频网| 《久久综合九色综合97婷婷| 狼人久草| 啪啪激情网站| 91ncm视频| 天堂成人A片永久免费网站| 人人人操B超碰| 亚洲乱码在线观看| 色欧美一级| 成人丁香婷婷| 啊V视频在线观看| 色综色网| 伊人网大香| 色婷婷成人在线| 77777亚洲午夜久久| 婷婷午夜| 五月丁香影院| 九九免费精品在线视频| 色色五月天com| 97精品人人A片免费看|