欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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.婷婷六月天| 久久婷婷五月综合色播| 久久人操| 人人超碰99| 日韩成人免费电影| 99久久玖玖| 色色丁香婷婷| 五月天色色色色色| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 久久视这里只有精品| 亚洲综合色婷婷| 99热这里只有精品23| 91 原创 在线 九色| 激情五月天色色网| 五月婷婷婷婷| 999婷婷综合| 久久五月丁香综合17C| 99热插| 国产午夜精品一区二区三区四区| 俺去也五月天婷婷| 色色五月婷婷久久| 色五月婷婷影院| 五月婷婷五月天激情视频| 伊人青涩网| 久久9精品视频| 久久久久九九九九视屏小说88| 五月亚洲| 婷婷五月无码| 天天综合中文| 噜噜五月天综合| 丁香五月综合色婷婷| 婷婷丁香五月天之开心少妇| 狠狠干五月| 午夜丁香| 99热欧美| 99热这里都是精品| 五月天激情小说| 襙逼网| 99热9| 丁香婷婷色色| 亚洲最大在线| 久久久久婷婷| 亚洲操人| 丁香六月婷婷久久综合| 久久综合九九| 精品国产va久久久久| 91视频人人做97| 久久久久亚洲AV综合| 五月天社区| 五月天成人网婷婷| 能看的av片| 亚洲色9| 五月色婷| 久热这里只有精品在线观看| 日韩一66精品| 国内精品玖玖| 亚洲九九视频| 婷婷五月天网址| 久久久人妻系列| 我要色综合五月婷婷| 欧美操人| 这里只精品| 久久久久久久丁香五月天婷婷| 超碰爱爱爱| 丁香综合久久| 欧美综合123区| 丝袜激情网| 丁香五月婷婷婷桃花影院| 超碰熟女农村在线69| 4399无码视频| 久久久精品99| www.久久9| 色婷婷基地 | 亚洲色五月天| 亚洲国产精品VA在线看黑人| 九九热视频精品999| 婷婷在线五月综合| 国产资源在线视频| 操久久网| 大香蕉伊在| 婷婷自拍| 婷婷五月天中文字幕.| 777精品久无码人妻蜜桃| 久久综合丁香激情五月| 内射爽无广熟女亚洲| 高潮毛片又色又爽免费| 色色五月激情| 超碰三级秋霞| 亚洲色情在线| 日韩无码色色| 天天影院色| 六月激情婷婷| 欧美成人AAA片一区国产精品| 超碰在线caop| 五月天婷婷情色| 久久九九网| 色综合久久五月| 99色色最新视频| 欧洲高清免费久久| 色99在线视频| 日本波多野结衣视频| 二区成人视频| 久久五月天大美女| 色婷婷久久综合中文久久一本| 五月丁香综合网| 五月丁香色| 亚洲乱码日产精品BD| 亚洲乱码日产精品BD| 99久久综合狠狠综合久久| 97操在线资源| 久一这里有精品国产| 五月之婷婷| 99综合免费视频| 成人片黄网站色大片免费毛片| 操逼综合激情网| 99熟女视频| 狠狠狠狠狠狠草| 激情文学五月丁香六月婷婷| 国产SUV精品一区二区6| 97婷婷狠狠| 这里只有九九精品| 九九热精品视频在线观看| 天堂伊人干| 色婷婷五月天成人网| 天天做综合| 伊人色五月| 婷婷丁香五月亚洲欧美| 婷婷婷婷婷开心无码播放| 超碰人人操在线| 青草视频在线播放| 99视频色在线观看| 免费啪啪亚州视频| 青青草99re| 丁香五月激情啪啪| 天天爽夜夜爽天天爽夜夜爽| 97超碰人人操| 大香人妻| 丁香婷最新动态| 国色天香伊人狠狠色| 91九色中文字幕女在线观看| 狠狠色综合无线观看| 大香蕉啪啪| 丁香五月天啪啪激情综和网| 被强行糟蹋的女人A片| 伊人综合色干| 色99网站| 五月天婷婷青青草| 激情婷婷五月天伊人在线观看| 五月婷婷在线视频| 色九九九综合| 五月天激情婷婷五月天久久| 五月天婷婷在线AN| 玖玖婷婷精品| 五月丁香六月婷婷网| 五月天色图| 99九九在线视频| 这里只有国产精品在线| 深爱激情五月婷婷| 激情五月天婷婷| 五月丁香婷婷基地| 大香蕉人人网| 大香蕉太香蕉视频97| 久思思热视频在线观看| 91精品丝袜久久久久久| 人人操人人爽成人AV| 五月天婷婷导航| 天天插天天射| 九九这里只有精品在线视频| 丁香六月综合激情| 丁香五月成人| 91九色精品| 综合五月激情| 国产丁香五月天婷婷| 激情五月天电影| 美欧成人视频| 在线中文亚洲| 99热插| 婷婷久久色| 日本网站久久| 丁香五月Av| 思思久久久婷婷| 美女婷婷六月色| www.99热| 91人妻色色网| 国产精品久久久久久亚洲毛片| 99综合久久| 9久久久久| 高清国产AV| 伊人五月天| 狠狠色综合网站久久久久| 色天天综合| 色九九中文字幕| 新男人天堂人妻| 丁香婷婷五月六月天| 国产真人做爰视频免费| 狠狠干激情五月| 国产精品久久久久久久久久| 内射激情在线| 嘿嘿视频免费看9| 99热精品6| 色五月丁香A欧美com| 天天干天天日天天插| 久久香蕉影院| 新激情五月天色播| 二级黄色毛片| 九九成人视频| 天天日天天干天天插天天射| 欧洲区自拍| 99爱在线视频| 91碰碰碰| 一本到不卡高清DVD| 狠狠干五码| 九九久久99| 婷婷色5月天在线。| 亚洲乱码日产精品BD| 婷婷五月天日日日干干干| AV在线不卡播放| 开心五月婷婷激情网| 疯狂做受XXXX高潮A片| 欧美久久五月婷婷| 婷婷五月六月丁香| 日日爽日日| 欧美色骚婷婷五月天| 日本色色影片| 色七七九九| 五月丁香久| 99视频只有精品| 婷婷五月激情丁香激情| 99九九热在线观看| 成人久久天天x资源站| 北条麻妃九九九国产精品视频| 深爱婷婷色| 伊人高清无码| 综合网啪| 亭亭玉立国色天香| 99在线播放| 色色丁香| 丁香六月伊人| 久久最新色色色| 亚洲日韩成人三级av| 色人五月婷婷| 99久精品| 狠狠色综合五月人人| 婷婷另类小说| 99热这里只有精品23| 久久图色4| 丁香婷婷激情| 色婷婷激情| 看婷婷五月天网| 欧美A片在线视频免费观看| 播五月,色五月,开心五月播放器 | 五月丁香综合精品| 91九色国产| 无码免费人妻A片AAA毛片西瓜| 欧美色爱五月天| 九九成人精品免费视频| 婷婷色色欧美| 北条麻妃伊人 | 精品皮股午夜AV| 久久99热 这里有精品| 久久A极片| 热久视频| 亭亭五月丁香综合欧美| 色 五月 天 婷婷 丁香 九月| 国产做爰视频免费播放| 色~性~乱~伦~噜| 99热这里只有精品10| 日韩野外 无套| 六月丁香激情网| 五月天激情开心网| 99精品这里只有免费视频| 五月婷婷七月丁香| 成人做爰A片免费看网站找不到了 噼里啪啦在线观看免费完整版视频 | 色情五月丁香| 五月丁香在线| 久热这里只有精品99re| 五月婷综合性中心| 丁香六月婷月91婷月| 97碰碰在线观看视频| www.久久| 丁香五月婷婷动漫| 九九热99熟女| 91精品丝袜久久久久久久久粉嫩| 久久艹 五月天| 五月婷婷啪啪啪| 激情五月色在线播放| 5月色亭亭视频| 色婷网| 人人综合91网| 日hao1区| 丁香婷婷超碰 | 丁香五月婷婷亚洲另类| www久久久久久久| 欧美性色A片免费免费观看的| 日韩亚洲视频| 色色五月婷婷| www.久久爱| 九九色色| WWW.99视频| 99热综合网| 婷婷丁香五月欧美人| 五月丁香A片| 激情久久肏屄视频| 成人丁香色| 免费看欧美成人A片无码| 色色五月丁香| 色色色色网站| 久久久久久久人妻| 97高清国语自产拍| 无码人妻精品一区二区蜜桃色欲| 欧美三级A做爰在线观看| 999热在线视频| 色六月视频| 精品九九视频| 五月丁香六月婷婷综合网| 成人在线视频网| 五月天色区| 俺去也综合| 色五开心五月五月深深爱| 99热色在线精品| 色操b| 婷婷五月中文字幕国产| 五月停停丁香| 九九热99热| 色婷婷五月天激情在线观看| 小视频一区 | 婷婷丁香色情| 亚洲精品网站色视频| 激情图片亚洲| 五月色丁香婷婷中文字幕| 五月婷婷偷| 久久伊人大香蕉| 任你艹| 99久热| 天天久综合网永久入口17v| 久久人人九九| 玖月婷婷爱丁香| 五月丁香激情婷婷综合字幕| 五月婷婷福利| 国产成人va在线| 五月天激情Av| 亚洲A色| 综合图片色色| 激情丁香五月天| 免费视频WWW在线观看网站| 成人精品视频99在线观看免费| 国产AV一区二区三区日韩| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 亚洲色五月婷婷| 人人操女人| 婷婷九月综合| 久久成人综合五月天| 99成人免费热视频| 亚洲九区| 全部老头和老太XXXXX| 日韩操人| 操b视频在线观看一区二区| 超热久碰.com| 26uuu美女三级视频| 久久永久网址| 国产精品VA在线| 狠狠干综合| 久草热久草在线视频| 99视频啪啪| 激情久久久久| 538久久| 天天色天天日天天舔| 色激情五月| 久久中文网| 五月丁香婷草| 国产精品色色色色| 97色婷婷| 激情婷婷网| 婷婷五月蜜桃成人桃色丁香| 夜夜爱伊人| 免费亚洲婷婷| g00d人体西西| 色久综合天天做视频| 91丨九色丨熟女高潮| 色哟呦av| 丁香五月AV综合| 婷婷久久综合久色| 日韩在线观看网址| 日韩免费乱轮网站| a久久| 亚洲电影在线观看| 99国产97在线,| 国产亚洲在线观看| 99热综合色图| 色五月激情综合网站| 月色色综合婷婷网| 快色t v在线入口| 天天干天天干天天干天天干天| 4438全国最大视频成人网站在线观看| 千人斩操逼| 99色干| 九九99九九精品视频| 丁香六月亚洲| 99色视频| 久久婷婷五月天激情新地址| 丁香五月婷婷黑人妻黄色电影院| 色婷婷AV久久久久久久| 4399无码视频| 五月丁香啪啪激情| 色综合天天综合成人网| 激情另类综合| 九九aV| 狠狠色丁香久久综合婷婷亚洲成人福利 | 九热...av| 极品少妇XXXX精品少妇偷拍| 色播丁香| 九九亚洲| 六月丁香基地| 五月激情综合网| 任你爽精品免费视频6| 婷婷涩涩五月天| 怡红院AV亚洲一区二区三区H| 亚洲综合在线视频| 91久久久久久久| 五月丁香婷婷激情影院欧美| www热久久yy9| 99久re热| 大香蕉婷婷久久| 久久国产高清| 人人人操| wwwss在线观看| 久热大香蕉| 亚洲色基地| 97 A I色色| 国外亚洲成AV人片在线观看| 婷婷丁香久久五月综合| 欧美成人精品A片免费一区99| 五月激情丁香五月| 99色综合| 五月婷婷免费| 精品无码久久久久久久久| 五月丁色AV| 色情五月综合婷婷| 色色色色色色色色色色色色色97| 99亚洲精品视频| 99视频在线啪| 丁香五月av| 99亚洲精美视频在线观看| 99这里只有精品| 99热精品观看| 亚洲精品亚洲人成人网| 色久影院| 超碰在线91| 超碰99在线观看| 人人干av| 狠狠88综合久久久久噜噜噜| 五月丁香六月香综合激情| 五月综合视频| 呦呦视频无码播放| 一级七香蕉| 97婷婷丁香| 中文字幕永久在线| 精品久久久久成人码免费动漫| 天天操天天操综合| 丁香五月婷婷亚洲激情四射| 丁香色五月天| 色噜噜狠狠色综合伊人| 操逼视频网址| 人妻AV在线| 日本在线免费中文com.| 色约约视频一区二区三区四区五区| 99热九九热| 超碰伊人碰婷婷五月| 日韩黄黄| 丁香五月婷婷激情视频播放| 久久久婷婷五月亚洲97号色| 五月婷婷六月色| 国产精品激情五月天色婷婷| 99碰视频| 欧美顶级少妇做爰HD| 久久婷婷五月综合色和| 狼人婷婷久久| 五月综合人妻| 亚洲免费观看高清完整版AV线| 亚洲啪视频| 蜜臀久久99精品久久久久久酒店| 色呦呦美女| 人妻乱码久久久| 超碰免费人人肏| 国产成人在线精品| 日韩乱玛久久| 国产片天天爽夜夜爽| 人妻在线观看视频| 五月天综合在线| 色婷綜合网| 综合99久久天天综合| 色噜噜狠狠色综无码久久合欧美| 五月丁香成人小说| 婷婷中文字幕版| 另类丁香综合| 又大又粗九一在线| 五月天啪啪啪| 丁香五月色色| 婷婷五月成人社区| 狠狠色大香蕉| 色噜噜婷婷| 熟女婷婷网站一婷婷五月一丁香婷婷一婷婷激情网 | 99热这里只有精品96| 九九色大香蕉| 狠狠色综合无线观看| 五月天色色网站| 色色色色色网| 青青草日本亚洲| 99亚洲天堂| 久久久久婷 | 五月天激情美女久久| 激情久久肏屄视频| 丁香婷婷视频| av婷婷丁香 六月| AV成人在线播放| 香蕉AV777XXX色综合一区| 丁香五月停停av| 婷婷五月天伦理| 狠狠色丁香久久久婷| 国产亚洲精品久久久久久郑州 | 丁香五月天激情视频| 婷久看人爽| 日韩啪啪网| 婷婷综合九色伊人| 亚洲爆乳无码精品AAA片蜜桃| 久久婷婷五月丁香网| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 日本久久网| av在线免费网站| 激情丁香五月激情婷婷| 亚洲天天免费| 亚洲婷婷月丁香五月| 亚洲欧美婷婷五月色综合| 狠狠色网| 182TV大香蕉| 中文字幕+中文在线| 91干婷婷| 九九99精品免费播放| 欧美叉叉叉BBB网站| 五月丁香少妇网| 99啪在线视频| 欧美啪啪五月天| 亚洲另类毛片| 伊人九九热| 日韩AV在线免费观看| 国产97在线日韩亚洲女人被黑人巨大| 人妻无码视频网| 中文字幕在线aⅴ免费观看| 一本色道久久综合狠狠躁小说| 五月成人网站| 婷婷六月激情丁香| 成年人99热| 五月丁香欧美综合免费视频| 国产高清RV综合aVa| 激情校园 亚洲| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 丁香婷在线| 色五月丁香在线| 五月丁香好婷婷A片网| 五月情综合| 婷婷丁香激情五月| 色五XX| 五月婷婷五月天| www.99成人视频| 天天干 夜夜爽| 综合XX网| 婷婷狠狠操| 色五月在线观看| 久久婷综合| 91精品久久久久久| 亚洲精品字幕| 中文字幕日产A片在线看| 日韩AV在线影片| 五月婷婷综合色啪首页| 综激情网| 婷婷五月天手机版视频| 99热8| 国产精品香蕉| 久久99操| 日本久久激情| 婷婷在线五月综合| 激情丁香六月| 26uuu欧美亚洲日韩| 色综合久久88色综合天天99| 91欧美日韩综合| 五月综合久久| 日本丰满久久| 丁香五月天堂网| 九九热这里只有国产精品| 五月婷婷av| 激情五月天在线视频| 中文字幕乱码亚洲精品一区| 免费视频1区| 色噜噜狠狠色综合成人网| 婷婷5月天激情综合| 久久久久久久久人妻| 色综合色| 夜色.cnm| 婷婷四月 成人 狠狠干| 丁香五月婷婷天| 91色五月| av人人操| 亚洲五月婷婷在线| 亚洲成人一区| 久草热8精品视频在线观看| 五月伊人婷婷999| 亚洲丁香婷婷五月天综合色| 五月亭亭狠狠| 欧美叉叉叉BBB网站| 九月婷婷色色| 五月天激情子轮| 丁香婷婷色五月激情综合| 99热免费18| 久久婷婷激情五月天一区二区| 精品五月天| 五月丁香婷婷啪啪| 99热综合网| 五月天综合缴情网网站0| 婷婷五月天天aV| 久色激情| 91爱操| 婷婷五月天色| 丁香五月婷婷欧美性爱| 热的五码久久精品| 色操b| 亚洲色久| 91热在线| 九九热婷婷| 中文毛片无遮挡高潮免费| 激情亚洲婷婷| 欧美婷婷五月丁香| 丁香花大香蕉婷婷综合| 青青草a在线| 亚洲av骚货| 五月天丁香婷婷久久九| 综合在线丁香五月| 大香蕉手机视频| www.五月婷婷| 色99在线视频| 色碰干| 婷婷网五月天| 超级久久久| www.色五月.com| 夜夜综合色| 4399啪啪视频| 亚洲欧美成人在线| 六月丁香婷婷综合狠狠爱夜夜爱| yazhochengrenavwang| 五月婷婷开心丁香| 日本欧美成人片AAAA| 色五月婷婷操逼| 伊人五月天| 人妻中文av| 99爱在线观看视频| 超碰在线日夜| 九九热在线亚洲免费视频| 亚洲成人影视在线观看| 亚洲AV网站在线观看| 噜噜噜久久| 9999热在线观看| 丁香五月婷婷AV在线| 婷婷色播婷婷| 久久婷婷五月天| 小视频久久久aaa| 久久精品4| 超碰国产在线| 久久精品性爱视频,| 激情四射网| 亚洲99在线| 人妻视频在线| 久久婷婷精品| 99精品在线观看| 翔田千里aV中文字幕| 另类图片激情五月| 五月天婷婷基地| 五月丁香久久网| 久久久婷婷| 人妻AV在线观看| 婷婷五月天av| 欧美性猛交99久久久久99按摩| 色五月丁香总合网| 色香蕉精品五夜婷| 六月婷婷在线| 91AV视频| 色播五月丁香| 婷婷丁香五月激情图片| 婷婷五月精品| 亚洲 视频 导航 一区| 9久视频| 九九成人| 日本操逼九九九九58日本操逼| 丁香五月婷婷综合91| 久久总和99| 婷婷色播色五月五色五月天色妇| 婷婷中文字幕| WWW.色婷婷.COM| 99内射视频| 日日夜夜天天| 久久这里都是精品免费| 天天干人人奸97| 人人播| 激情综合五月| 狠狠爱成人综合网| 综合在线色婷婷| 人人操99| www...com黄在线观看| 国产亚洲精品久久一区二区三区| 久久激情视频99| 婷婷久久五月天| 婷婷丁香一月| 天天干天天曰天天射| 丁香五月六月婷婷综合| 99亚洲综合| 在线日韩av| 久久五月丁香| 天天夜夜操| 日韩精品一品二区三区的使用体验| 色婷婷综合网| 五月伊人婷婷| 色天天综合天天综合频道。| 另类亚洲电影| 五月丁香六月情| 99国产这里只有精品| 9久精品| 黑人糟蹋人妻HD中文字幕| 国产色色视频| 18av天堂| 婷婷五月丁香色综合| 激情综合网激情五月天| 人人干女人| 我爱婷婷五月天综合88| 久久停停超碰| 超碰在线观看caop| av亚洲国产小电影| 超碰成人在线观看| 思思热久热| 激情开心五月婷婷| 天天搞天天爽| 婷婷五月丁香超碰| 激情开心五月亚洲| 人妻性爱| 五月婷婷与六月丁香图片激情| 五月天婷婷AV| 五月丁香六月花| av 一区三区四区| 久久精品系列| 日韩AV在线免费| 狠狠色丁香| 伊人久久大香网| 国产精品色婷婷AV综合色色| 婷婷激情鹿城五月天| 丁香六月婷婷开心| 亚洲爱婷婷| 亚洲成人网址在线观看| 五月丁香婷婷啪啪| 极品另类| 婷婷婷婷婷开心无码播放| 五月天激情Av| 激情99热| 色六月天天激情综合网| 久久九九玖玖| 99riAv1国产在线观看| 玖玖综合色区在线观看| 少妇高潮呻吟A片免费看软件| 五月天色丁香| 久久五月综合| 中文字幕综合| 91ncm视频| 亚洲色网址| 日本操B视频| 激情五月天免费视频| 婷婷伊人激情婷婷| aaaaaa片| 综合综合色色| 六月色日韩| 五月久久婷婷| 婷婷午夜精品久久久| 五月天婷婷激情四射综合| 激情九月丁香婷婷| 色色网五月激情| 色色色五月| 国产成人精品一区二三区熟女在线| 久久久婷| 日日天天干| 久久久久er热| 欧美日韩一区二区三区四区| 97久久人人| 97在线精品视频| 亲子乱AV一区二区三区下载| 五月99久久| 欧洲免费视频色| 五月丁香婷庭在线| 五月天亚洲最大成人| 5月婷婷视频网站综合| 日日日,com| 日本的α片xxxwww| 欧美性丁香色色五月天| 五月丁香成人版| 国产91在线视频| 日狠狠| 夜夜爽天天日| 久久这里只有精品07 | 99爱在线视频| 男女啪啪做爰高潮无遮挡| 欧美色综合天天久久综合精品| 久久婷婷精品| 97色色视频| 99久久国产宗和精品1上映| 日韩精品视频中文字幕| AV操一操| 激情五月丁香六月综合AVXXXX| 色色狼人综合| 99色视频在线观看最新| 99热大全在线观看| 五月花综合| 丁香五月综合在线| www.色色色色| 26uuu精品一区二区| 午夜九九九九九九九九九九九九九| 亚洲愉拍99热成人精品| 大香蕉手机视频| 91色综合网站在线| 久久久久久久五月| 国产精品成人在线| 天天日人人| 噜噜五月天综合| 91AV婷婷| 香蕉AV777XXX色综合一区| 十二区无码| 亚洲综合婷婷五月| 五月丁香婷婷激情久久| 婷婷五月天激情综合网| 六月丁丁香| 夜夜操夜夜爽| 色婷婷五月婷婷五月婷婷五月| 色五月婷婷五月天激情综合| 99自拍视频在线观看| 中文字幕网伦射乱中文| 青青久在线视频免费观看| 任我肏视频精品| 美女激情综合| 日韩精品色| 國語久久婷| 成人中文网| 激情五月综合第一页| 亚洲无码另类| 亚洲丁香五月| 大香蕉AV在线| 影音先锋一区二区资源站 | 色五月丁香六月欧美综合| 99热国产免费| 综合色五月| 亚洲 在线 另类| 五月丁香欧美综合| 毛片新网地| 色婷婷电影网| 天天操天天插天天射| 久久精品4| 日日操,夜夜爽| 丁香五月天堂网| 91美女啪啪| 蜜臀A∨在线水帘洞| 丁香婷婷视频在线| 丰满少妇猛烈A片免费看观看| 日韩啪啪视品| 亚洲丁香五月综合| 天天插天天插| 婷婷大香焦| 99小视频| 99爱视频| 久久97| 91玖玖| 91人人爽久久涩噜噜噜| 99亚洲精品| 99热老司机| 丁香色五月婷婷| 国产69久久久欧美黑人A片| 精品亚洲国产成AV人片传媒| 99福利视频| 午夜一区| www.久久久久| 亚洲激情97五月天| 婷婷丁香社区| 五月婷婷综合网| 天天人人人人人人人人人人人| 又大又粗九一在线| 熟女91九色| 五月色欧洲| 99精彩视频| 五月久熟女| www.色九月| 色在线视频网2025| wwwav大香蕉| 婷婷在线操| 五月天综合色| 99caobi| 成 久久| 中文字幕永久在线| 丁香五月在线人妻| 91色五月| 久热99热| www天堂99| 俺也去综合| 午夜不卡久久精品无码免费| 九九热在视频| 六月婷婷色综合| 五月天无码| 五月天成人小说| 天天射综合网站| 色婷婷狠| 色护士综合| 九九热视频免费| 婷婷综合五月| 淫视馆av三区| 日本九九热| 久久久亚洲精品一区二区三区浴池| 夜夜躁狠狠 | 久操热| 99视频久久免费视频| 五月丁香在线| 91色在线/日韩| 亚洲最大在线| 91在线日| 色偷偷五月天| 97碰碰人人| 99热这里有精力| 国产成人+综合亚洲+天堂| 天天激情站| 婷婷色五月天色| 日本爆乳片手机在线播放| 色婷婷五月影院| 夜夜爱伊人| 一区二区三区XXXXXX| 婷婷六月天| 站长推荐无码播放| 五月天丁香网| 激情五月天婷婷免费观看| 婷婷六月色| 丁香五月网络网络| 日韩精品AV一区二区三区| 天天日人人爽| 99热有精品在线观看| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 激情五月天综合网| 激情丁香六月| 久久久99久久| 99热最新地址在线| 五月婷婷片| 激情五月天在线| 少妇搡BBBB搡BBB搡毛茸茸| 99亚洲色色| 久久婷视频| 玖玖精品视频| 玖玖在线视频福利| 96精品成人无码A片观看金桔| 成人精品一区二区三区四区五区 | 伍月婷婷六月丁香| 这里只有精品视频| 开心婷婷五月中文字幕组| 欧美大香蕉视频| 97久久超碰| 久久99性爱| 久热中文字幕| 欧美情色一区| 婷婷五月天亚洲五码| 久久婷婷视频| 99re欧美精品| 91九色欧美| 热热久久精品视频| 丁香五月影院| 丁香六月欧美| 九九视频这里只有精品在线播放 | 天堂AV在线看| 97碰| 欧美三级巜人妻互换| 综合激情视频| 精a品a视a频| 久久精99| 99色 | 狠狠操狠狠| 美臀自射自家人妻| 久久九九囯产| 97人人射| 五月花婷婷| 欧美内射AA| 久久婷婷网址| 五月婷婷激情综合网| wwwss在线观看| 亚洲a片免费观看| 99热这里全都是精品| 人人摸人人干人人做| 久久综合婷婷| 任你干线上免费视频有3吗| 亚洲最大视频| 五月婷婷色五月| 久久久18| 亚洲综合欧美色丁香婷婷888月图片| 国产成人网站在线观看| 另类激情五月天| 97人妻人人| 精品一二三区久久AAA片| 亚洲激情网| 26uuu亚洲欧美另类| 色情久久久| 99久| 婷婷久久综合| 99这里只有精品视频| 激情六月五月婷婷综合网| www.色婷婷.com| 亚洲六月综合激情久久下卡| 天天干夜晚夜操| 狠狠色综合五月| 婷婷五月天av网| 五月丁香久久呀| 级人人91| 人人操AV| 婷婷丁香18| 日逼免费视频 | 婷婷丁香成人色综合| 久久婷婷视频| 婷婷五月久久| 激情丁香五月婷| 色播婷婷五月天| 超碰色婷婷| 一本九九色| 国内自拍97在线| 少妇性按摩无码中文A片| 久久HD| 日本五月天激情| 五月婷婷激情综合视频| 色色丁香五月婷婷| 色五月xxx| 这里只有精彩小视频视频网站| 一月婷婷色色| 97色97干| 欧美久人人| 超91在线视频| 色婷婷五月丁香色| 九色综合网| 久色精品| www.狠狠| 久久久精品AV| 九月丁香亭亭| 五月综合激情| 激情丁香九九五月综合网| 九热免费视频| 六月久久婷婷| 五月天开心色情网| 大香蕉99热| 亚洲精品亚洲人成人网| 久久99热这里只有精品| 手机免费福利视频| 狠狠干在线| 26uuu最新地址| 激情综合亚洲色婷婷五月| www.久久66| 五月成人综合| 96五月丁香熟女| 夜夜干夜夜操| AVDV久久| 操逼三区| 五月丁香六月婷婷久久| 丁香五月色| 五月丁香六月在线| 九九色色| AA片在线观看视频在线播放| 亚洲电影在线观看| 思思热99er| 日韩乱轮AV| 色色999三级片| 五月丁香久久综合色| 99热综合色图| 97操操| 婷婷基地成人五月天| 99热这里有精品6| 少妇婷婷五月天| 无码色色| 久久精彩视频| 色婷久久| 国产精产国品一二三在观看| www.夜夜| 婷婷五月综合免费在线| 91亚洲天堂| Y11111111111少妇电影院| 婷婷综合性爱网| 五月婷婷综合性爱噜噜| 亚洲精品影视| 99久久久国产大片| 婷婷五月天第四色| 美女五月狠狠| 91精品国产91久久久久青草| 专区无日本视频高清8| 伊人爱爱日本| 欧美网站视频4399| 色 免费网站视频| 噜噜噜精品欧美成人在线观看| 五月丁香六月婷婷在线观看| 亭亭色色五月天| 九九日伊人| AVV黄| 无码一区二区日韩| 99精品偷拍视频| 玖玖综合网| 色七色九九| 5月婷婷综合| 99re思思热久久| 五月天色图| 久热婷婷综合| 婷婷第一页| 色色色色色色色综合| 天天撸天天干天天插| 激情综合色网| 久久久久久久久久久久久久久久一道本| 婷婷久久在线| 婷婷五月天色丁香| 夜夜爽天天爽| 丁香色婷婷| 五月伊人婷婷999| 亚洲精品色色| www.久久av.com| 超碰人妻在线| 9999综合99综合人| 99久久综合| 丁香五月a| 亚洲五月天婷婷| 97操在线| 99热99在线| 99色热视频| 日本久久婷婷| 操逼视频网址| 九九热超碰| 99在线精品视频免费观看20| 色色色色色色色色五月先| 婷婷色影音天| 色婷网| 亚洲视频伍月婷婷| 五月激情天| 99操无码视频观看| 天天插天天插天天插天天插| 夜夜撸天天日| 97精品欧美91久久久久久久| 无码激情AAAAA片-区区| www.久久爱.com| 爱婷婷五月| 色婷婷五月在线| 伊人久久大香线蕉综合网站| 五月天色婷婷图片| 婷婷综合色色| 激情久久婷婷| 亚洲五月天婷婷综合| 深爱婷婷网| 久久久久98| 天天日夜夜草进麻麻的子宫| 欧美久久婷婷| yw.av| 成人欧美一区二区三区在线观看| 激情伊人| 丁香花操逼| 九热视频这里只有精品| 五月天大香蕉| 九九亚洲综合| 五月天婷婷综合网| 日本nghangse中文字幕| 六月婷婷啪啪| 欧美婷婷五月丁香| 丰满少妇乱A片无码| 天天综合情| 成人五月天丁香婷| 五月天停停日日| 婷婷四色五月| 狠狠色综合网| 五月在线婷色| 狠狠狠狠狠狠狠狠| 国产免费一区二区三区三州老师F1F1.CC| 奇米影视在线视频| 熟女五月天久久综合| 午夜亚洲国产精品av一区二区| 超碰在线网站9| 99色丁香婷婷综合网| 搡BBBB搡BBB搡18| 色五月婷婷婷婷婷婷婷婷婷婷| 中文字幕在线不卡| 99久久婷| 精品成人在线观看| 亚洲无码成人| 久99久在线| 精品导航在线x不卡| 色综合久久88色综合天天| 色婷婷8| 五月天深爱激情网| 激情婷婷五月丁香啪啪啪| RenRenSe在线视频网站| 影音先锋91网站在线观看| 丁香五月天婷婷久久| 亚洲综合五月天| 五月丁香婷婷久久| 久久9热好| 玖久精品视频9| 五月天婷婷青青草| 99 热| 色婷婷六月| 99综合99| 久久婷青青草原| 五月丁香六月色婷婷| 男同91| 精品少妇蜜臀91| 丁香婷婷五月激情四射网| 狠狠色精品综合| 日韩欧美成人网| www色五月| 人人97碰| 丁香六月色婷婷| AV美美午夜| 色域五月丁香| 色婷婷六月丁香综合欲精品| 五月婷婷黄| 国产亚洲99久久精品| 色愛综合网| 天天日夜夜爽| 五月综合六月婷婷| 免费操超碰| 婷婷综合亚洲| 99精品在线观看| 国产精品美女久久久久AV超清| 噜噜噜精品欧美成人在线观看| AV色色天堂中文| 五月婷婷在线免费| 97操在线视频| 少妇被躁爽到高潮无码文| 久噜久噜| 久久在线大香蕉| 五月天大香蕉| 激情黄色小说五月天| 91在线观看www| 99综合免费视频| 婷婷五月天激情综合婷婷五月天激情综合| 少妇高潮呻吟A片免费看软件| 婷婷丁香亚洲五月天| 五月婷九九草| 大香蕉520| 婷婷丁香水多多视频| 久久3级片| 五月丁香婷婷色色| 九九久久99| 9精品一区| 丁香婷婷色五月激情综合| 校园激情 亚洲| 婷婷的色色五月天| 五月丁香啪啪综合| 五月婷丁香亚洲| 丁香六月婷婷综合欧美| 婷婷在线视频| 亚洲第一精品成人999久久精品| 色婷婷综合综合网| 五月丁香综合激情| 亚洲性图一区二区| 九九色情网五月天| 99热超碰| 日日夜夜婷婷| 亚洲性爱99|