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
返回資訊列表
内射人妻视频国内| 五月婷婷丁香大陆免费| WwW色婷婷| 五月婷亚洲精品| 六月丁香婷婷视频综合在线观看| 激情伊人网| 五月丁香影视| 五月丁香亭亭| 色色五月婷婷| 91超碰在线播放| 激情二色月| 日韩久久色| 国产性爱在线| 全部老头和老太XXXXX| 日韩精品一区二区亚洲AV观看 | 婷婷五月天成人网| 97色图片中文字幕视频在线观看| 狠狠色丁香乆乆| 婷婷激情小说| 婷婷五月情| 久热只有精品| 丁香六月婷| 婷婷丁香五月激情中文字幕版| 玖玖婷婷婷丁香五月| 成人AV在线中文版| 日本精品人妻无码77777| 67194中文字幕| 五月丁香激情六月| 玖久精品视频9| 五月丁香啪啪| 天天日天天舔天天摸| 99啪在线视频| 婷婷综合一二三| 亚洲日比视频| 91婷婷丁香五月亚洲| 丁香激情网| 婷婷激情综合网| 久久这里只有精品热在99| 新激情五月天色播| 丁香五月a| 色狠狠图片| 色黑鬼导航| 色色五月天婷婷| 久久 婷婷 五月天| 深爱五月月天| 五月丁香六月婷婷综合在线| 五月天婷亚洲综合在线嫩草网| 99热精品观看| 婷婷精品综合| 六月婷婷综合| 久1色色| 无码激情| 色9色| 欧美激情五月天在线观看| 九九这里只有精品在线视频| 激情五月综亚网| 亚洲日本激情| 五月婷婷婷婷婷婷艺术| 九九久久网| 婷婷五点亚洲| 97久久精品| 婷婷丁香九月| 色婷婷五月天| 九月丁香婷婷网| 久热精彩视频98| 在线精品97| 亚洲在线网站| 99热最新精品| 亚洲激情淫网| 岛国AV网站| 色婷婷视频在线| 色七七色九九| 这里只有精品视频免费在线观看| 国产精产国品一二三在观看| 亚洲AV另类| 六月婷婷九月丁香| 亚洲AV激情五月综合网| 色婷婷色五月天| 十一月婷婷激情四射| 丁香婷婷激情六月五月开心| 色婷婷五月天在线观看| 婷婷丁香激情五月天色色色| 黄色一级影片| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 色色婷婷丁香| 五月天激情美女久久| 色婷婷播放| 伊人大香蕉综合在线| 激情久久网| 成人Av在线大片| 九九热这里只有精品首页| 月月AV| 五月婷婷激情中心| 日本超碰在线| Aaa久久| 狠狠色丁香婷婷五月| 五月天婷婷伊人| 五月婷婷激情综合| 这里只有精品视频99| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 51XX午夜影福利| 丁香六月婷月91婷月| 五月丁香好婷婷姑娘综合网| 综合网啪| 91无码一起草| 色五月丁香六月资源站| WWW.桔色成人.COM| 久热精品免费视频4| 久久99网址| 天天干狠狠操| 五月色婷| 国产美女主播vip| 国产成人+综合亚洲+天堂| 青青草视频福利| 99视频九九热| 久久久久视剧HD| 婷婷的久久网站| 五月婷在线色视频| 五月丁香六月激情综合| 人人性久久| 婷婷婷五月天最新综合你懂的| 9九色首页| 99色综合| 丁香五月综合婷婷| 五月丁香六月激情| 久久九九经典| 天天爽天天透天天爱| 九九热re99re6在线精品| 色一情一乱一伦一区二区三区| 婷婷丁香五月激情密臀av| 天天射夜夜爽| 色婷婷视频| 第九色区AV在线| 丁香色五月婷婷17C| 欧美α√| 91AV视频| 可以看的AV网站| 狠狠色色| 五月六月丁香激情视频| 九九人人操| 狠狠爱丁香婷| 999影院成人在线影院| www.婷婷五月| 五月婷丁香| 伊人婷婷五月天| 万月丁香狠狠爱| 久久久久久欧美精品se一二三四| 91综合色| 欧美天堂久久| 欧美在线97| 99情色五月天| 99综合色| 丁香五月天婷婷大香蕉| 欧美国产一区二区三区| 玖玖综合玖玖| 婷婷五月天美女21p| 99九九99九九九视频精品| 激情五月六月婷婷综合啪啪| 在线观看国产高清视频免费网站 | 色色婷婷综合| 婷婷在线操| 色婷婷激情| 久热一本| 久草五月天| 婷婷综合色网| 成人版视频在线观看| 久9热插入| 婷婷深爱五月亚洲综合| 人妻无码视频网| 五月天婷婷在线观看精品男人| 99这里只有精品|v| 同性gv国产精品一区二区| 五月婷婷色色| www.狠狠操.co m| 五月天婷婷在线AN| 色婷婷内射| 97色干| 91丨九色丨白浆秘| 99热色精品| 婷婷亚洲日本| 亚洲精品久久久无码| 五月丁香激情啪啪| 亚洲人妻av伦理| 天天操夜夜啊| 六月婷欧美丁香综合| 情婷婷五月天| 91精品91久久久中77777久久玖玖九九| 偷拍五月丁香| 久久婷婷视频| 色色五月婷婷网| 99色爱| 久热爱大香蕉在线蜜臀悦色| 超碰97人人操| 天天射射夜| 伊久大香蕉| 久久婷婷五月天亚洲欧美| 婷婷五月丁香性爱| 亚洲中文字幕网| 久热无码| 激情AV综合| 五月丁香六月婷婷综合网站| 快乐激情五月色婷婷| 五月天成人综合| 天天更新天天亚洲| 啪啪色区| 无码人妻精品一区二区蜜桃色欲| 五月婷婷色五月| 综合性爱网| 国产精品大香蕉| 99热20| 99色嘟嘟精品网站| 婷婷色五月天在线| 六月婷婷五月天| 五月丁香成人| 综合久久婷婷99| 欧美25p| 激情网第九色| 五月丁香婷婷综合网色欲| 精品人人操| 激情五月婷婷欧美极品 | 色五月婷婷五月| 日日想日日夜日日操| 热99热久| BBWCUCKOLD精品熟妇| 四色五月婷婷在线观看| 五月婷婷 欧美| 亚洲成人电影在线免费观看| 精品人妻一区二区| 99色在线| 婷婷五月骚厕所| 大香蕉婷婷五月天| 2021日韩无码| 成人午夜天| 五月亭亭网成人在线视频| 国产亚洲色婷婷99精品| 在线观看中文字幕亚洲| 亚洲欧洲小视频9| 激情六月婷婷| 婷婷五月天视频免费在线观看| 五月丁香怕怕综合| 99热在线观看精品| 98热精品| 丁香五月婷婷图片综合| 久久九九网| 亚洲综合激情五月| 第四色婷婷五月| 91丨九色丨高潮丰满日本| 久久性爱网| 99在线热| 五月花婷婷| 激情婷婷五月色| 另类视频综合| 国产操B视频| 精品一区久热| 国产精产国品一二三在观看| 99无码| 久久精彩免费视频| 天天做夜夜爽| 99这里只有精品|v| 亚洲A色| 99久久这里只有精品免费官网| 碰97久久| 六月婷色| 日本97在线| 亚洲日比视频| 高清a片基地| 91啪啪| 人妻综合网| 亚洲99精品欧美一区| 色婷綜合网| 久久99免费视屏| 五月天婷婷社区久久综合| 婷婷五月天av小说| 人妻在线观看视频| 色综合99色| 香蕉久久国产AV一区二区| 超碰人人色| 99无码视频| 九九精品视频在线观看| 五月花综合视频| 狠狠色五月| 激情精品久久| 色97综合婷婷天天色| 99 r热| 天天摸天天肏| 久久这里只有精彩| 琪琪理论片| 天天色天天搡| 加勒比色色| 久久6这里只有精品| 五月天激情偷拍| 激情五月天色| 色。 日日日| 九九热在视频| 思思精品久久艹 | 久久综合五月天| 国产激情综合五月久久| 99A片| 丁香婷婷五月| 99婷婷精品推荐在线视频| 国产无遮挡又黄又爽免费网站| 亚洲日本韩国| 国产精品色色| 超碰九九热| 91操网| 亚洲不卡| 无码人妻精品一区二区蜜桃色欲| 激情综合网激情五月俺也去| 熟美女麻豆| AV在线收看| 97干在线看| 婷婷丁香亚洲色综合91| 婷婷五月天激情网址| 久热这里只有精品在线观看 | 欧美性猛交 XXXX 乱大交| 97福利视频| 久久精品99国产精品日本| 日韩黄在免| 性爱技巧五月| 国产婷婷五月天| 丁香五月香蕉| 99久久成人| 日本人人xxx| 精品久热69| 亚洲视频五区| 久久性爱99国产| 婷婷五月天丁香久久| 久久婷婷夜| 亚洲欧洲另类| 激情五月天激情综合网| 99热偷拍| 91色综合久久| 丁香六月激情综合| 色女伊人| 可以免费观看的av| www亚洲无码| 日本一道久久| 欧美亚洲婷婷五月| 色五月天激情| 狠狠干.com| g00d人体西西| 日本www五月婷婷| 六月久久狠狠| 99热这里| 婷婷五月天亚洲综合| 色色精品色| 99成人免费热视频| 97人人草| 超碰在线中文字幕| xxx综合在线| 日韩aaaaa| 午夜婷婷| 亚洲在线综合| 天天综合天综合| 免费黄色视频网址| 一区二区传媒视频| 丁香六月亚洲| 另类激情五月| 五月丁香婷婷色播无码| 久久黄色免费视频| 熟女激情网| 亚洲欧洲中文日韩久久AV乱码| 九九色天堂| 99在线免费视| 另类在线| 欧美性猛交99久久久99| 丁香五月激情图片| 国产精品久久久久久久久久| 色爱综合网| 丁香五月天AV| 婷五月天影院| 极品 少妇 内射| 国产成人AV在线| 欧美五月婷婷综合| 中文aV网| 国产毛片欧美毛片久久久| 大香蕉99热| 日日艹思思热| 亚洲久久天堂| 激情五月色综合国产精品| 狠狠色色| www.精品99| www.狠狠艹| 国产精品涩涩涩视频网站| 色综合久久天天综合网| 啪啪激情综合| 123草逼网| 97 A I色色| 色欧美一级| 婷婷五月天改成什么了| 超碰91在线| 五月婷婷影院| 日本美女上人| 99色色| 婷婷五月草| yirenjiqingshiping| www.久久五月天.com| 婷香五月激情视频| 性爱AV天堂| www.久久久.com| 99在线热视频| 碰碰女| 五月天丁香婷婷社区| 五月天六月婷| 96色婷婷| 五月婷婷九九热| 激情AV中文| 五月激情综合美女久久| 亚洲国产色婷婷| 成 人 色 色| 黄色网址五月婷婷| 精品久久66| www.久99| 日本在线va| 青青草五月天| 99精品网| 丁香九月婷| AV操逼网| 思思久久99热| 风流少妇A片一区二区蜜桃| 五月在线婷色| 激情98色婷婷五| 丁香五月婷婷欧美成人色图| 任你搞在线观看视频| www激情婷婷com| 99re在线免费视频| 欧洲亚洲午夜| 9er热在线精品视频| 成片免费播放| 色情免费视频播放| 久久婷婷电影| 操碰99| 色播五月丁香| 亚洲性爱AV在线| 国产婷婷五月天| 青青草原爱爱网| 亚洲无码99| 五月婷婷色影院| 婷婷开心激情| 国产熟女日日骚五月丁香爱| 婷婷的色色五月天| 99热精品在线观看| 色婷亚洲| 日本啪啪天堂| 婷婷综合性爱网| 色综合激情| 肏屄色播伊人97婷婷| 99热这里精品| 综合五月天婷婷色| 爽极品色| 艹B高清无码| 五月丁香六月婷婷无码| 婷婷五月色| 天天综合网亚洲网站| 欧美日韩五月婷婷| www.超碰| nvrentiantang av| 天天日狠狠| 日韩性爱无码| 97人人草| 婷婷欧美| 国产日日夜夜操| 丁香色五月AV在线| 天天操夜夜操| 97碰碰视频| 99这里只有免费的精品| 婷婷五月天大香蕉| 成人免费120分钟啪啪| 人人射人人高潮| 婷婷伊人综合中文字幕| 久久大香蕉同僚| 亚洲综合新99视频| 2017人人操| 精品亚洲国产成人A片在线鸭王| 五月天成人小说网| 99热热九九| 日逼影音先锋AV男人资源站| 五月丁香大香蕉| 开心五月婷婷婷美女| 亚洲综合在线伊人婷| 婷婷五月天成人视频| 亚洲1区| 天天做天天爱天天玩夜夜爽| 女人露出p毛视频www网站| 亚洲永远av在线播放| 九九Av| 综合久久人妻| 亚州激情在线视频| 色五月色五天色情网| 中文字幕人妻一区二区| 国产 码在线成人网站| 亚洲国产精品VA在线看黑人| 日逼免费视频| 99热精品10| av国产精品偷| 超碰人人操人人9| 欧美性做爰大片免费看办公室| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 婷五月天天| 少妇婷婷五月天| 97精品人人A片免费看| 五月婷婷99热| 五月综合久久| 超碰人人在线| 婷婷精品综合| 久久五月天免费网站| 四川女人毛多水多A片| 五月丁香婷婷色| 五月婷婷五月色| 国精产品久久| 怡红院精品视频久久久久久久久| 五月天无码视屏播放| 在线视频另类| 亚洲网站999| 性爱五月婷| 久久婷婷一级片| 香蕉久久国产AV一区二区 | 久99热| 深夜婷婷五月丁香| 久1色色| 丁香五月激情婷婷视频| 99久久婷婷国产综合| 国产91九色| 人人操碰| 婷婷九月在线| 婷婷九色| 婷婷精品综合| 日韩久久色| 丁香五月激情啪| 久大香蕉| 婷婷九月丁香| 丁香九月综合| 777久久精品| 涩涩涩,com| 在线区区区| 六月丁香五月激情亚洲AV| 婷婷基地成人五月天| 天天做综合| 五月激情五月丁香| 三级成人网站| 色婷婷综合网站| 久久久久久五月天| 日婷婷| 婷婷五月天天爽| 激情五月天啪啪| av色婷婷| 久热无码| 丁香六月天婷婷色| 亭亭丁香97| 丁香五月激情月| 亚洲天堂啪啪| 好吊操这里只有精品| 色婷婷4| 欧美婷| 色色色成人网| 国产成人av在线播放| 色婷久久| 国产日韩精品SUV| 色婷丁香91| 日本欧美999久久久三级片| 亚洲AVDVD| 另类专区在线| 夜夜骑日日操| 一级操逼内射在线视频| 另类精品视频在线观看| 婷婷五月成人| 丁香五月婷婷激情蜜桃| 日本色天堂| 色综天天综合| 色噜噜婷婷| 五月丁香啪啪啪| 五月婷婷激情综合网| 欧美搡BBBBB摔BBBBB| 亚洲成人日韩无码精品| 香蕉狠狠爱视频| 色色色综合视频| 国产,欧美,日韩,性爱| 中文在线成人| 99色色| 色综合久久88色综合天天| 久久9热| 婷婷五月天伊人在线| 色婷婷九月| 天天搞天天色综合| 国产乱妇乱子在线播视频播放网站| 亚洲啪啪自拍| 人人干天天舔| 99精品色| 国自产拍偷拍精品啪啪一区二区| 婷五月天六| 五月婷婷xxx| 亚州性爱99| 亚洲另类婷婷综合| 九九九激情网| VA婷婷| 丁香六月色婷婷| 五月丁香六月婷婷网| 久久婷婷一级片| 色啪影院| 丁香五月天色婷婷| 99视频这里有精品| 丁香五月激情宗合网| 九九久热| 日韩无码专区| 丁香五月综合高清在线| 久久538| 在线观看免费视频| 国产67194| 99热6色| 免费看欧美成人A片无码| 97干在线看| 五月丁香六月婷婷a v| 激情综合网五月婷婷| 31色区视频免费看| 五月色丁香婷婷中文字幕| 99玖玖免费视频| www...com黄在线观看| 人人爱干人人爱草| 综合久久影院| 久久精品天| 99色在线观看| 99色| 亚洲VA欧美VA| 大香蕉AV在线| 色天堂A| 欧美日韩AAA| 51精品国自产在线| 99 色色吧| 久久精品婷婷| 五月丁香自拍| 99∨VTV| 丁香八月综合激情| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 色播激情| 五月丁香激情婷婷综合| 99久久99综合| 情情五月天色| www.激情| 99热国内| 亚洲乱码精品久久久久..| 91精品婷婷国产综合久久| 丁香五月av| 婷婷日本色| 丁香六月亚洲综合 | 久婷婷五月激情| 色婷婷狠狠| 丁香婷婷六月天| 97se视频在线| 猫咪伊人久久| 97热这里精品在线视频| 色婷婷777狠狠| 亚洲婷婷基地| 五月丁香琪琪| 久操婷婷| 热的国产99热| 一起草AV| 99色播| 激情五月综合网丁| 亚洲五月情| www.seqingwuyuetian| 欧美激情2025| 婷婷激情五月天桃花网| 激情文学五月丁香六月婷婷| 9久久网| 99ri精品在线| 99热欧美| 色色操| 狠狠va| 欧美日韩二区在线| 日日夜夜久| 99热99草97| 99久久久久久www| 色五月天堂| 夜夜干天天操| 九九在线免费观看| 天天色五月婷婷91久久久久久久| 99爱视频在线| 久久婷婷啪啪视频| 成人精品在线观看| 婷婷综合网站| av线电影| 天天狠天天叉| 天天射射夜| 韩国97天堂| 思思99久久| 欧美激情综合| 欧美激情综合五月色丁香| 婷婷五点亚洲| 六月婷婷av| 丁香五月婷婷基地| 丁香五月停停av| 爆乳熟女一区二区三区爆乳 | 在线成人网址| 乱岳熟女50岁| 婷婷丁香激情综合色情| 啪啪 综合网| 开心激情婷婷| 狠狠干无码| 婷婷五月丁香综合| 超碰人妻公开在线| 9l视频自拍九色9l视频在线观看| 婷婷五月天中文字幕.| 久久久精品婷婷五月天| 欧洲亚洲免费视频9| 天天日天天摸天天| 91性人人| 婷婷色婷婷| 婷婷久久综合久色| 九玖视频这里只有精品| 婷婷五月天久| 色婷婷丁香五月| 99er精品视频| 美女天天艹人人爽| 日韩精品99久久| 天天操天天插| 久草热在线视频| 精品五月丁香| 日本3级片一区2区| 色爆五月| 欧美日韩91| 丁香六月婷婷姐网| 久久色五月天| 九九精彩久久| 九九爱激情| 亚洲热久久| 五月丁香六月成人| 春色激情第四色| 五月丁香婷婷综合久久| 亚洲天堂碰碰婷婷| 国产精品久久久久久妇女6080| 婷婷激情综合| 色五月天视频| 色色热99| 91婷婷色五月| 午夜福利成人AV91| 色五月激情五月| 久久亚洲婷婷| 激情五月婷婷五月丁香五月开心五月 | 日韩在线观看网址| 99热这里只有精品青草| 99这里有精品视频| 九色色| 99热精品10| www.婷婷亚洲基地| 97人妻碰碰碰久久久久-最近国语高清| 丰满少妇乱A片无码| 久久激情五月| 久久五月婷婷丁香| 九九婷婷五月天| 99免费视频精品| 六月欧美综合色情| 久久丁香| 五月婷婷AV| 激情综合色婷婷啪啪六月天| 人妻在线观看视频| 久久久一级AAA| 嫩草AV久久伊人妇女超级A| 五月丁香香蕉| 色色五月天网站| 婷婷激情六月| 日本va欧美va国产激情| 五月丁香婷婷激情视频| 。久久久久久久久久久久久久人妻| 久久黄色网扯| 秋霞午夜理论| 婷婷五月成人色综合| 五月婷婷黄色| 色五月色五天色情网| 激情图片婷婷| 99热亚洲| 婷婷欧美综合| 99啪| 亚洲操逼片| 丁香婷婷五月色成人网站| 99热碰碰| 亚欧州精品视频| 伊人久久大香线蕉av一区| 色欧美日| 91日韩美女被插视频| 激情四射婷婷色色色| 五月天婷婷激情网| 黑人熟妇一区二区三区| 色情五月天。| 超碰91人人操| 久久久久9999| 色综合爽| 夜夜夜夜操| 俺去也在线视频| 婷婷五月天成人基地| 色丁香婷婷| 天天草天天摸| 久久艹99| www.99视频| 婷婷丁香久久| 丁香六月婷婷色XXXX| httpwww色com日本| 在线99精品| 九九99九九99九九99视频网| 九九热AV| 99热这里只有精品21| 伊人超碰| 色婷婷色婷婷五月| 丁香五月六月婷婷综合| 97人凄人人操人人爽| 九九久久网| 亚洲激情久久| 五月激情婷婷偷拍| 亚洲xx网| 婷婷六月激情小说网| 丁香五月大片| 亚洲成人黄色网| 狼人婷婷综合| 日日干夜夜干| 免费一区二区三区| 91超级碰在线| 亚洲精品va| 丁香五月色五月婷婷宗合| 玖玖热视频| 亚洲九九夜夜| 国产黄色在线观看| 一级性感毛片| 五月总合激情网| 亚洲麻豆乱码国产2028| 亚洲色色色| 色色色色综合网| 狠狠色婷婷综合开心影视| 激情九月天天天天婷婷| 婷婷激情五月天网站| 五月婷婷六月婷| 激情综合色图| 免费看欧美成人A片无码| 亚洲国产成人AV在线| 久久久久久久97| 五月丁香婷婷婷婷综合网| 九九视频在线| 成人做爰高潮A片免费视频| 五他月天啪啪啪| 深爱激情中文五月天av| 五月丁香婷婷激情澎湃四射| 色色色色色色色色五月先| 欧美三9久九观看| 久人操| 婷婷五月丁香激情色情| 99色精品| 久久色六月| 97干欧美| 丁香五月天的网址。| 99精品在这里| 五月天怕怕| 天天拍天天做视频| 2017狠狠干| 九久久九精品视频| 精品思思久久| 日韩aaa| 被男人添B超爽视频| 九九色院| 婷婷五月天电影在线| 深爱激情六月天| 欧美三级视频下载| 五月丁香啪啪激情| 一区视频网站| 九九激情| 婷婷五月丁香基| www久| 久人人操| 人人舔天天| 日本va欧美va国产激情| 综合玖玖偷拍| 99热99热| 精品一二三区久久AAA片| 91超碰在线播放| 99热在这里只有精品| 欧美成人AAA片一区国产精品| 色五月五月婷婷| 婷婷五月天激情基地| 亚洲视频一区| 色婷婷狠狠18禁| 久久99精品久久久久久三级| 6 9式性爱视频在线播放| 久久在这里有精品| 岛国AV网| 婷婷丁香五月天影院| 丁香六月婷婷综合在线| 无码激情AAAAA片-区区| 永久的网站AAAA | 色五月丁香五月天| 欧美婷婷丁香社区在线播放| 99极品视频| 日本色五月| 丁香五月婷婷色情综合| 亚洲va综合va国产va中文| 欧美三级韩国三级日本三斤| 激情综合激情五月| 丝袜大香蕉| 99热在线观看免费中文| 超碰人人超碰| 99色精品| 天天干天天拍| 欧美一线视频| 五月婷婷五月丁香| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 亚洲欧美婷婷五月色综合| 日韩成人无码片| 国产精品视频久久99| 中文字幕成人网站| 婷婷深爱五月亚洲综合| 蜜桃人妻无码AV天堂三区| 99热免费精品热久久66| 婷婷久久色| 激情五月婷婷丁香六月| 99性视频| 99热只有精品综合| 婷婷六月久久综合导航| 五月丁香啪啪激情| 99久久极情精品一区| 婷婷综合五月| 激情丁香五月婷婷| 第2色五月婷| 天天日日夜夜| 天天插天天日天天爽| 中文字幕无码人妻少妇免费视频| 色五月天天| 九九色婷婷五月天| 五月婷婷网五月在线| 五月婷婷综合色啪首页| 人妻内射视频| 亚州操逼网| 男女99免费视频| 综合激情伊人影视在线| 丁香五月AV| 六月五月久久丁香| 人妻免费网站| www.99热这里只有精品| 啪啪六月婷婷| 综合色图区| 5月色婷婷| 亚洲字幕AV一区二区三区四区| 丁香五月天激情小说| 婷婷综合在线网| 日韩aaa| -91九色大屁股| 操99| 日日狠夜夜狠| 色婷婷综合丁香五月天| 97久久精品| 色色色视频免费无码 | 91网站黄| 思思热在线观看| 思思热99在线| 成人啪啪色婷婷久| 这里只有精品视频99| 婷婷综合五月天激情| 色五月婷婷丁香凹凸| 第四色五月婷婷| 狠狠综合| 色综合激情图区| 丁香狠狠色婷婷| 日韩欧美一区二区三区四区| 97碰碰草| 六月婷久久| 91热er| 婷婷丁香91| 日本色五月| dingxiangtingtingliuyue| 夜夜躁婷婷AV| 开心五月天激情网| 五月婷婷免费在线视频| 欧美噜噜噜草| 91av成人| 久久综合婷婷| 色区域网站视频| 99网址在线看| 亚洲三级无码| 亚洲av网站在线观看| 五月天婷婷色播在线网| 婷婷五月天久久综合88| 免费视频无码| 五月丁香六月婷婷色情| A一级操| 欧美激情伊人| 99热久久这里只有精品| 人妻久久久久久| 色五月天中文字幕| 色女人久久| 色婷婷呢狠禁久禁| 91久热| 狠狠色综合久久| 99在线精品视频免费| 超爽内射| 少妇人妻人伦A片| 99啪啪网| 五月丁香婷在线| 99热超碰在线| 一区二区三区四区牛| 欧美成人精品A片免费一区99| 久久久这里有精品| 五月婷婷 六月丁香| 五月丁香六月激情综合| 天堂久久久久天堂网| 538在线精品| 久久久这里有精品| 激情五月丁香在线观看直播| 婷婷永久在线| 丁香六月av| 欧美午夜乱妇午夜福利| 成人看片网站| 99视频只有精品| 久久人妻高清中文| XXXX岛国| 色欲丁香| 精品99视频| 五月天啪啪网| 色五月视频无码播放| jiqingtaose五月天| 成人网站av免费网站推荐| 99se丁香| 黄桃AV无码免费一区二区三区| 久久久99久久| 五月天久久综合婷婷| 五月婷婷综合潮喷| 深爱激情九九五月天| 久久婷婷五月天| 亚洲视频操| 1234操逼网| 婷婷干| 9久热精品在线视频| 五月婷婷综合网| 黄网在线播放| 超碰激情网| 久久婷婷国产| 中文字幕成人影视| www.婷婷五月天.com| 色婷婷五月天小说| 玖玖福利视频资源| 亚洲无码成人性爰网| 五月丁香综合啪啪啪啪啪| 超碰成人免费| 久草大| 午夜成人AV在线| 亚洲色图45p| 玖玖99免费视频| 欧美日韩国产一区| 香焦网五月天| 蜜臀av粉嫩av懂色av| 中文在线成人| 五月天婷婷爱| 色狠狠色综合久久久绯色AⅤ影视| 色婷婷综合影院| 亚洲无码黄色| 色五月婷婷综合在线| 97色图片中文字幕视频在线观看| 97超级操操| 4438成人电影| 久久婷婷内射| 99热播放| 色99视频| 五月丁香色婷婷婷基地| 婷婷五月天激情四射五月天激情| 丁香婷婷综合精品六月初| 久久婷婷成人视频| 亚洲综合新99视频| 丁香五月另类小说在线阅读| 国产综合激情五月久久| 久久机只有这里精品| 思思热久久爱| 夜夜干夜夜操| 综合久久高清| 人人摸人人搞| 五月激情综合网| 国产黄色在线| 五月丁香亚州综合网| 亚洲视频无| 国内一级精品| 九九精品视频免费在线| 天天激情视频| 六月丁香激情综合| 五月丁香六月婷婷姐| 色婷婷激情| 色偷偷五月天| 国产AV熟妇人震精品一品二区| 九月丁香网婷婷| 婷婷99丁香| 久久久WWW| 亚洲精品欧洲精品| www.激情五月天com| 五月丁香六月激情视频| 婷婷五月天综合网| 五月天成人综合| 五月婷婷电影院| 伊人久久综合| 九九精品网站| 丁香五月激情六月综合| 久久综合五月| 91丨九色丨43老版熟女| 精品人妻伦九区久久AAA片| 一本到不卡高清DVD| 亚洲无码黄色| 密黄站| 99亚洲无码| 综激情网| 青草视频在线观看视频| 精品九九婷婷| 丁香五月亚洲激情婷婷射| 色狠狠图片| www久久艹| 色婷婷成人做爰A片免费看网站| 五月天另类小说久久小说网| 人人干99| 无码激情精品色婷婷久久久久| 99热在线播放| 99热超碰| 丁香五月婷婷欧美成人色图| 国产欧美日韩性爱| 色综合色色色色色| 五月停亭六月,六月停亭的英语| 最近免费中文字幕大全高清大全1| 9色免费网| 丁香婷婷五月天校园春色| 九九性视频| 日本丁香五月| 国产亚洲av片| 丁香婷婷五月天亚洲| 色色色色色色网站| 91精品久久久久久综合五月天| 亚洲图色五月天| 亚洲激情综合色站| 丁香五月在线| 国产暴力强伦轩1区二区小说| 久热精品在看| 桔色成人官方网站| 欧美97色| 色爱爱综合网| 99亚洲综合| 色色热| 大香蕉AV电影在线| 国产激情综合五月久久| ji'qi'luan'ren'lun| 色优久久| 涩综合网| 婷婷王月天影院| 99久久9| 久久新| 丁香婷婷色六月| 亚洲综合成人网| 六月婷婷久久| 婷婷综合精品视频97| 日本综合色图| PORNY九色9l自拍视频成人| 婷婷丁香五月高清| 国自产拍偷拍精品啪啪一区二区| www.久久久久久久| 天天做天天爱天天要| 风流少妇A片一区二区蜜桃| 丁香激情久久| 欧美色婷婷| 亚洲日比视频| 狠狠狠激情网| 天天干,天天日| 婷婷射图| 五月婷综合| 色吧网综合| 丁香五月天欧美| 丁香六月婷婷综合| 九九AV在线| 色综合九九| 激情五月天影院| 国产97色在线| 国产Va视频| 五月丁香婷婷色色| 噜噜狠狠色| 欧美日本不卡黄色片| 青青草a在线| 亚洲色热| 日韩成人av在线| 婷婷五月天AV在线| 丁香激情五月少妇| 天天色域综合网| 久久婷婷七月丁香| 色婷婷丁香五月丁香| 亚洲另类电影| 婷婷成人综合| 色欲色香综合网| 夜夜 操无码| 色色色婷婷五月天| 热久国产| 色五月欧美| 色一情一乱一乱91Av| 久热只有精品| 五月五月婷婷| 月婷婷婷婷五月| 九九久久免费视频44| 99热6色| 97在线天堂| 99热精品在线播放| 91传媒无码人妻精| 99热免| 超碰99热在线观看| 丁香成人五月天| 99热全是精品| 色婷狠狠| 91精品久久久久久久久| 超碰在线观看9| 丁香色综合| 狠狠操狠狠爱| 人妻性爱av网站| 亚洲天堂久久| 五月婷婷香蕉| 99视频热99| 婷婷香五月天| 91视频综合网| 91综合国免费久入| 婷婷在线精品| 久久婷婷色| 色婷婷五月天天天天天天天天天| 少妇大叫太大太粗太爽了A片| 久久av电影| 玖玖婷婷色欲| 情久久综合五月天| 91九色大屁股| 色婷婷久久| 亚洲天堂AV免费片| 激情AV网| 深爱激情丁香| 婷婷丁香激情综合色情| 天天干天天操天天爽| 天天天天天色| 久久99草五月婷婷| 丁香五月婷婷亚洲色图| 久色网| 黄桃AV无码免费一区二区三区| 欧美另类五月激情| 日韩激情网站| 亚洲成人免费电影| 婷婷的五月天另类视频| 天天综合区| 激情爱爱网站| 五月婷婷五月丁香综合| 五月婷三级片| 五月丁香婷婷网在线在线| 五月丁香婷婷色色| 日本人人超碰| www.色婷婷.com| 丁香婷婷久久| 伊人狼人干| 五月天丁香成人| 丁香五月天激情婷婷丁香六月 | 婷婷五月天桃花网| 久久人妻乱| 五月天婷婷激情网| 97啪在线观看视频| 噜噜噜久久| 青草性爱视频| 欧美日韩精品一区二区三区钱| 99爽视频| 婷婷深爱五月亚洲综合| 日韩美女在线视频19| 96丁香六月婷婷蜜桃综合久久| 婷婷五月中文字幕国产| 日韩精品一区二区亚洲AV观看| 丁香五月天激情综合| 五月丁香六月在线| 五月丁香手机在线| 色综啪啪| 成年人丁香五月| www,天天干| 狠狠干天天内射|