久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(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項目配置為主體另附可運行exe、依賴dll以及.sql數(shù)據(jù)庫腳本打開解決方案即可運行調(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ù)擴展操作審計、菜單權(quán)限等功能提供基礎(chǔ)。1. 用戶模塊看著簡單為什么Winform項目里最容易返工做過內(nèi)部管理系統(tǒng)、MES上位機的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項目案例、準備給系統(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)限字符串就得逐個用戶改過去改完還得擔心誰漏了。所以在這個標題的場景下五張表再加一張日志表是性價比最高的結(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ā)不高去掉物理外鍵可以避免刪除角色時被外鍵攔住、操作順序受限。如果團隊規(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ù)庫最常見的隱性坑后面避坑章再細說。3. 用戶創(chuàng)建與角色分配用Dapper把新增和授權(quá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)。常見做法是在新增用戶窗體里上方放用戶名、密碼、確認密碼、顯示名下方放一個CheckedListBox展示所有角色點擊保存后一次提交。界面布局不是重點重點是數(shù)據(jù)鏈路。我一般用Dapper替代原來的DataSet和SqlCommand手寫參數(shù)原因很實際Dapper擴展方法簡單SQL可控性能開銷極小團隊里任何人接手都能看懂。密碼不能明文入庫入庫的是“鹽”和“哈希值”。鹽是每次生成的一串隨機字節(jié)轉(zhuǎn)Hex哈希用PBKDF2或SHA256計算。注意一件事同一個用戶登錄時必須用同一個鹽去重新計算哈希所以鹽必須單獨存一列不能只存一個哈希值。3.2 用Dapper把用戶和角色寫進同一個事務(wù)下面是核心代碼。為了聚焦業(yè)務(wù)邏輯省略了控件取值部分但從方法簽名能看出入?yún)⒑统鰠ⅰublic 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角色放進同一個BeginTransaction要么全提交要么全回滾。我在實際項目里見過有人分開調(diào)用兩個方法執(zhí)行兩條SQL結(jié)果用戶創(chuàng)建成功、角色分配失敗最后靠手工寫腳本補數(shù)據(jù)才恢復(fù)。有了事務(wù)這類事故從根上斷了。PasswordHelper的生成邏輯也值得展開GenerateSalt用RNGCryptoServiceProvider生成16字節(jié)隨機數(shù)轉(zhuǎn)Hex長度32位HashPassword用Rfc2898DeriveBytes迭代10000次輸出128位十六進制字符串。不要用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)用可以在后臺留一個“是否強制強密碼”的配置項不寫死。停用角色角色表里可以加一個IsEnabled字段來區(qū)分啟用和停用。分配角色時CheckedListBox只勾選啟用角色保存前再校驗一遍roleIds里沒有停用角色ID。不然用戶綁定了一個被停用的角色登錄時權(quán)限加載為空排查起來以為是權(quán)限bug其實是數(shù)據(jù)問題。4. 操作權(quán)限設(shè)置登錄后按權(quán)限碼控制菜單和按鈕而不是到處if判斷4.1 登錄成功之后權(quá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)一用小寫或大寫風格我建議全部用PascalCase和C#常量風格保持一致。這個加載動作必須在主窗體展示之前完成。如果用戶沒有登錄成功主窗體壓根不該出現(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)用時機放在主窗體的Load事件里。關(guān)鍵點是控件的Tag屬性。給每個需要權(quán)限控制的按鈕和菜單設(shè)置Tag為權(quán)限碼代碼里不在業(yè)務(wù)邏輯里判斷權(quán)限只在渲染階段掃描一次。這樣權(quán)限變更時只需要改窗體的Tag不需要改按鈕的Click邏輯。做法反過來也成立登錄用戶擁有超管角色時直接跳過權(quán)限掃描所有控件可見普通角色走掃描邏輯。這是給管理員留后門的標準做法用角色編碼判斷。4.3 權(quán)限碼粒度按功能塊控制別把按鈕點成雪花粒度是操作權(quán)限設(shè)置最需要拿捏的地方。權(quán)限碼太少比如只有“管理員”和“普通用戶”兩種角色控制不細致權(quán)限碼太多比如“修改用戶姓名”“修改用戶密碼”“修改用戶郵箱”各一個權(quán)限碼權(quán)限配置界面會讓客戶看得頭皮發(fā)麻。我一般按功能塊劃分一個模塊一個權(quán)限碼。比如“UserManage”管用戶模塊的新增、修改、刪除、重置密碼“DataImport”管數(shù)據(jù)導(dǎo)入“DataExport”管數(shù)據(jù)導(dǎo)出。按鈕級別不再細分。原因是Winform內(nèi)部系統(tǒng)的使用群體有限操作員和管理員的職能差異遠沒有大到需要給每個按鈕授權(quán)。權(quán)限碼數(shù)量控制在20個以內(nèi)配置界面用CheckBox分組勾選客戶能看明白程序也好維護。5. 用戶模塊開發(fā)避坑權(quán)限散落、日志卡UI、MD5密碼等6條血淚經(jīng)驗5.1 權(quán)限判斷散落在按鈕點擊事件里需求一變就要翻遍整個窗體現(xiàn)象客戶提出“操作員不能刪除用戶”開發(fā)人員需要在五六個窗體的刪除按鈕點擊事件里分別加判斷。改完后測試發(fā)現(xiàn)列表右鍵菜單里的刪除沒攔、工具欄刪除沒攔、快捷鍵刪除沒攔。原因權(quán)限判斷分散在各處每個入口單獨寫一份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線程點幾下鼠標界面就卡住現(xiàn)象用戶操作幾次后Winform界面越來越卡點擊按鈕要等一兩秒才有反應(yīng)。任務(wù)管理器看到進程CPU不高但界面無響應(yīng)。原因日志表寫入操作直接放在按鈕點擊事件里同步執(zhí)行每次寫日志都占用UI線程操作一多UI線程全耗在等待數(shù)據(jù)庫響應(yīng)上。更隱蔽的是日志寫入失敗拋異常直接打斷正常業(yè)務(wù)操作。解決日志寫入統(tǒng)一走后臺線程不阻塞UI。常見做法是定義一個日志方法內(nèi)部用ThreadPool.QueueUserWorkItem或Task.Run把插入操作丟到后臺如果希望順序?qū)懭胗靡粋€日志隊列加單線程消費。日志寫入失敗不能影響主流程寫日志的代碼整體包一層try-catch失敗就丟掉本次日志。5.3 密碼用MD5裸存被脫庫等于全網(wǎng)撞庫現(xiàn)象數(shù)據(jù)庫被拖走后攻擊者用彩虹表直接反查出大部分用戶的密碼包括管理員。因為MD5相同的明文所有系統(tǒng)都一樣撞庫成本極低。原因開發(fā)階段為了省事直接用MD5(密碼)存庫沒有加鹽也沒有迭代計算。MD5本身不是為密碼存儲設(shè)計的計算太快暴力破解成本低。解決用PBKDF2或bcrypt。代碼里已經(jīng)提到PasswordHelper核心是每人生成獨立鹽鹽和哈希一起存登錄時取出鹽重新計算哈希再比對。迭代次數(shù)不要低于10000這個開銷在登錄時完全可以接受。老系統(tǒng)遷移時可以用“舊密碼哈希算法標記”區(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ù)完整性靠代碼保證但提示和確認環(huán)節(jié)不能省。這個邏輯放在一個事務(wù)里刪除失敗全部回滾。5.5 權(quán)限加載失敗時靜默吞掉異常整個窗體像沒裝權(quán)限一樣全開現(xiàn)象某客戶端登錄后所有菜單按鈕全部可見點任何功能都能操作甚至包括“重置密碼”——實際上這個用戶只應(yīng)該看日志。原因加載權(quán)限的代碼里寫了空的catch塊或者加載SQL里表名拼錯被捕獲后沒處理。權(quán)限集為空HasPermission永遠返回false掃描邏輯把所有控件隱藏或顯示的邏輯寫反時會導(dǎo)致權(quán)限全部放開。我見過最危險的寫法是catch后直接return然后登錄流程繼續(xù)往下走。解決權(quá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插入時用了當前時間的ToString()格式受系統(tǒng)區(qū)域設(shè)置影響排序規(guī)則是字符串字典序和自然時間序不一致。解決數(shù)據(jù)庫里時間字段一律用DATETIME或DATETIME2代碼里用DateTime.NowDapper自動映射不要手動ToString()。界面展示格式化放到顯示層做。如果有的項目已經(jīng)用字符串存了老數(shù)據(jù)遷移時用一個標準格式y(tǒng)yyy-MM-dd HH:mm:ss重新整理排序才能可靠。6. 權(quán)限驗證SQL、熱刷新與日志歸檔上線后維護的三件小事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)限查詢單獨拿出來驗證跑完能直接看到用戶掛了哪些角色、每個角色給了哪些權(quán)限。上線后客戶反饋“某人權(quán)限不對”先用這條SQL查數(shù)據(jù)再去看代碼邏輯能篩掉一半的誤報。6.2 權(quán)限熱刷新管理員改完權(quán)限不重啟程序Winform程序連續(xù)運行幾天后管理員改了某角色的權(quán)限配置客戶端還保留著登錄時的內(nèi)存權(quán)限必須重啟才能生效。內(nèi)部系統(tǒng)這樣做影響不大但如果客戶端很多逐個重啟也是麻煩。我在權(quán)限模塊里加了一個重置按鈕管理員在主界面點擊“刷新權(quán)限”調(diào)用PermissionHelper.ClearPermissions()后重新按當前登錄用戶ID走一遍加載流程界面控件再掃描一次。這樣權(quán)限熱更新不用重啟程序。實現(xiàn)時有個細節(jié)刷新前要記錄當前窗體的權(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
返回資訊列表
99久久精品国产系列| 中国操逼无码| 爱爱动态试试看6 0秒| 国产精品久久久久久久黄无码 | 亚洲 综合 第一页| 99这里只有精品| 亚洲视频1区| 天天肏视频| chaopen97久久| 蜜桃久久久久久| 中文久久爆乳| 欧亚乱色熟女一区二区| 国产中文大片资源中文字幕| 国产一区二区免费福利片| 99re6在线视频精品免费完整版安卓版| 久久黄黄| 亚洲精品97p| 亚洲综合码| 亚州伊人色综台| 亚洲AV无线| 国产亚洲福利第一页丝袜| 91欧美www| 亚洲天堂少妇| 亚洲日韩电影| 91熟女丨老女人| 久久九九精品一区二区| 91操熟女视频| 亚洲av资源| 熟妇女伦乱视频视频 | 狠狠操夜夜| 久久丁香久草综合网| 久久久久婷婷精品av电影| 日本 成 人 小说 电影 一区二区| 99热只有这里有精品| 肉丝无码中文高清| 九月激情婷婷| 99热18| 黄视频免费| 亚洲a色| 欧美最婬乱婬爆婬牲视频| 91色综合色| 日本性一区| 少妇丝袜在线观看AV| 天天日天天屌天天操| 国产天天看| 天堂伊人久久| 亚洲午夜蜜臀| 日韩9区| 久久精品—区二区三区内射| 性爱免费视频成人| 91精品丝袜久久久久久无码人妻| 国模限制级电影| 97视频网站在线观看| 亚洲最大的黄色电影网站。| 久久精品电影| 色综合91好| 国产精品女aA片爽爽视频| 国产精品日韩在线一区| 日韩欧美tv一区二区在线观看| 中国少妇XXXX做受| 精品性爱无码在线播放| 极品丝袜无码| 大香蕉2017| 久久久新亚洲AV| 超碰色男人操熟女| 国产97色在线| 国产传媒1234区| 加勒比伊人影院| 尤物AV免费网站| 日韩一级二级三级| 欧美日韩另类在线播放| www.99视频| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 91精品女厕偷拍视频| 国产亚洲精品第一最新| 嗯嗯啊在线视频| 大香蕉 222| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 亚洲激情 欧美色图| 日本视频一区二区三区| 91久精品| 肥臀熟女一区二区三区视频| www.久久制服糖| 久久青青草在线视频| 日韩免费看在线黄色片| 人人摸人人舔一区二区| 97免费在线视频在线观看| 日韩av不卡在线看| 国产精品一区二区手机看片| 日韩人妻少妇中文字幕| 日韩在线女优天天干| 日韩视频小说在线观看| 欧亚无码视频| 天美国产精品| 日韩人妻无码不卡网站| 久久久久成人亚洲国产| 欧美色综合图片| 日韩激情电影中文字幕| 亚洲天天艹| 日本免费一区二区不卡| 精品国产一区二区三区香蕉欧美| 黑人中出21连凳花野真衣| 四虎在线视频| 亚洲一区二区性爱电影| 日本一线产区和二线产区伦理片| 91 亚洲 欧美 日韩 国产 综合| 女人的天堂大香蕉网| 大香蕉狠狠爱| 久久久久国产无av| 久久久日本电影| 丝袜美腿操av| 长长久久曰曰夜夜成人网| 亚洲人妖网| 性夜影院爽黄A爽免费动漫| 免费簧片在线观看| 丝袜美腿操av| 日本九九九九| 久操国产在线| 欧美|91色综合| 蜜臀99久久精品久久久久久| 久久草在线综合视频| 屁股久久久久久久久| 东北女人av| 久久久婷| 激情99| 大乔未久88一区| 国产精品扒开腿做爽爽爽视频| 日韩AV一起草| 久久精品国产Aⅴ| 97精品国产97久久久久久| 亚洲清纯综合| 人妻熟女一区在| 另类欧美色| 婷婷午夜| 91在线欧美| 极品粉嫩一区二区| 日本三级一区二区 在线 | 欧美黄色大片在线观看| 性爱AV天堂| 女人双腿搬开让男人桶| 国产综合久久久麻桃个| 神马久久69| 日韩一级成人毛片免费观看| 欧美亚州综合网图片| 在线播放成人网站| 一级人妻性爱视频| 美女网站黄页| 日日干日日摸| 无码抄逼网| 91情色在线| 欧美日韩色图片| 一级日本牲交大片好爽在线看| 97欧美色资源| 99只有精品| 日韩精品中文字幕人妻| 人妻少妇久久| 日韩丝袜人妻AV| 国产av波波国产精品| 国产精品禁久久久精品| 九草在线大香蕉| 无码国产精品午夜不卡(| 日本大香蕉综合网| 五月天亚洲网| 96免费视频在线| 色牛牛AV| 免费少妇一区二区| 啊啊啊啊嗯嗯在线久久久| 91久久久久免| 国产综合网站在线播放| 麻豆精品一区二区三区四区免费观看| 国产女人高潮嗷嗷嗷叫小说| 丰满人妻-区二区三区免费看| 久久97资源 网| 亚洲砖码砖专无区2023| 成人av性爱电影在线观看| 欧美天天影院| 欧美在线干| 用力操死我| 精品 码产区一区二-1080P高清在线www-B029AV | 黑人精品欧美一区二区蜜桃| 日韩在线女优天天干| 国产亚洲精品美女久久久久久2021| 久久久久久久唑| 一二视频神马久久传媒| 久久久18禁| 一区二区你上我| 99re国产中文字幕| 一级特级aaaa毛片免费观看| 国产日韩无码一区二区三区久久区| 夜夜无码| 欧美日韩国产色五月综合在线| 偷拍欧美激情| 亚洲欧洲偷拍一区| 第一高清av中文字幕| 伊人网免费视频| 97九色| 丝袜AV一区二区三区| 91女优在线观看| 一级日本牲交大片好爽在线看| 亚州色综合| 后入精品| 99av| 午夜传煤十二区精品| 亚洲情色 无码专区| 成人在线午夜视频一区| 欧美大片天天看| 蜜臀AV成人精品蜜臀AV久久| 日夜久久久九九九久| 99热超碰| 欧美亚洲国产自久久| 高清不卡视频| 男人的天堂色偷偷青青草视频婷婷网| 青青色综合| 久视频在线观看| 97这里都是精品| 久久国产对白激情浪潮 | 亚州综合网| 78久久| 亚洲乱妇p22| 97超碰精品图片| 96超碰网| 国产精品毛片?v一区二区三区| 日本黄色大片一级视频免费麻豆| 人人艹亚洲| 欧美亚洲尤物久久| 色婷婷五月天| 一区 欧美 日韩 麻豆| 日韩少妇丰满亚洲| 先锋音影AV| 麻豆一区二区三区在线看| 97天天摸天天爽| 无码区蜜乳| 探花熟女,姿勢到位,體驗感也到位| 色噜噜精品一区二区三| 久久丁香五月天| 乱理日韩中文| 久热网| 日日骚中文字幕| 欧美性生活男人的天堂| 亚洲最新中文字幕免费 | 天天欲望网| 91视频精品| 亚洲五码一区二区三区| 欧美色图天堂在线| 日本黄色精品| 伊人精品久久网站| 亚洲九区| 激情亚洲天堂| 亚洲中文字幕av| 亚洲性爱成人| 婷婷激情综合网| 爱干爱射网啊啊啊| 蜜臀久久99精品久久久久久成人小说| 91免费看一区二区三区| 无码伊人久久大杳蕉中文无码| 98色网| 麻豆a'v电影| 97色亚洲| 中文字幕aⅴ在线视频| 六月丁香啪啪| 久九9精品| 国产精品白领在线观看 | 亚洲色天堂九9| 国产精品久久久久久久久久梁医生| 日韩一级成人毛片免费观看| 国产一级久久久| 色爱天堂| 丁香六月婷婷久久综合| 中文三一区| 综合操逼| 伊人玖玖网| 久久超碰97| 国产高清MV操逼视频| 夜夜中出国产| 好涩综合| 色色五月天婷婷| 超碰免费欧美7| 乱伦a片视频| 欧美日韩国产电影| 欧美黄色片在线播放| 亚洲色图大香| 美女诱惑久久| 日本三级日本三级99| 亚洲91大片| 男女性感激情网站| 牛牛久久国产精品视频一二三| 九九九精品| 久久精品欧美一区蜜桃| 亚洲丝袜综合| 日韩人妻资源在线看| 搡老熟女国产1000部| 中日韩久久久免费看| 亚洲国产欧美一区二区潘金莲| 91久久婷婷| 日日骚av| 人妻夜夜爽天天爽麻豆三区网站 | www.男人天堂| 国产黄色小视频网站| 亚洲另类久操网| 中文字幕欧美日韩三级| 久久久久精| 搡老女人老91妇女老熟女| 人妻少妇色综合| 久久无码精品| 日韩人妻操B| 国产精品96| 无码heyzo高清一区| 中文字幕欧美日韩三级| 狠狠图片青青草| 欧美国产精品| 在线 欧美 亚洲| 超碰99热| 啪啪啪综合网| 亚洲色图国产另类| 1禁看欧美黄片免费看| 麻豆区久久久久亚| 欧美日本不卡在线| 少妇二级| 强奸乱伦中文字幕AV| 天天综合网亚洲综合网| 色色色色色色色色色色色色色色综合| 日韩电影在线观看网址| 天天内射| 九色97| 免费久久一级毛片大黄| 熟女高潮精品一区二区| 蜜臀亚洲中文| 亚洲综合婷婷| 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲囯产精品女人久久久| 加勒比伊人影院| 综合色啪| 先锋影音av先锋一区| 中文子幕一二三| 韩日精品四区| 东亚亚洲无码高清| 日韩操啪| 超碰色97| 神马久久69| 五月丁香六月婷综合成人综合| 97在线观看免费视频| 秋霞鲁丝午夜无码一区二区三| 99色视频| 99久久久久久久久| 蜜臀久久99精品久久久久| 欧美综合网1| 2020中文字幕| 五月丁香社区婷婷日韩欧美精品影院| 中文字幕乱码人妻二区三区| 久久国产精品m码| 91欧美性| 男人把坤坤插入女人的下体| 蜜桃视频精品一区二区| 色青青久久影视| 国产精品 视频| 清纯唯美综合亚洲| 欧美超碰人妻97| 九九热精品在线| 操逼网免费无码视频| 岛国免费视频在线| 中文?日韩?免费?精品| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 永久免费观看的毛片的网站| 男人天堂站| 黄色一区二区秘书性感| 精品国产Av无码久久久伦古装| 日韩人妻精品中文字幕| 超碰性爱97| 国产精品一二三区福利| 超碰人人超在线观看| 午夜一级免费毛片| 午夜视频久久久久一区| 亚洲一级黄色毛片| 中国操逼无码| 绯色一区二区三区不卡少妇| 亚洲色图欧洲| 色色色综合网| 精品亚洲国产成人AV制服丝袜 | 欧美片第一页| 无码人妻一区二区三区色欲aⅴ| 欧美少妇高潮视频| 精品国产99999| 激情婷婷黑人91| 久久久久久久久久久精| 日骚逼视频| 91熟女网| 超碰78| 久久精品超碰| 日韩成人小视频| 丰满少妇精品一区二区| 午夜啊啊| 九九九九热| 色激情综合网站| 在线视频 亚洲精品| 97色网| 操一操摸一摸| 人妻 丝袜美腿 中文字幕| 国产精品女生av| 国产AV精久久| 久久丁香五月婷婷| 97超碰美国| 国产suv精品一区二区四区999 | 国产传媒一区二区三区| 翔田千里无码一区| 日本不卡高清视频| 大香蕉520| 91人妻视频在线| 91jk色拍| 东京热,男人的天堂| 东京热毛片177b2viP| 一级黄色性爱裸体视频| 九月丁香婷婷色| 性欧美第一页| 亚洲无码国产探花在线观看| 亚洲欧美日韩夜夜| 超碰午夜在线| 亚洲天堂电影网99999| 97色色色| 一级特级aaaa毛片免费观看 | 久久综合超碰| 人妻天堂网| 狠狠久久手机视频精品| 國產尤物AV尤物在線觀看| 99∨VTV| 99热精品国产| 9久久久久| 黄片免费看的| 91欧美成人色站| 激情亚洲天堂| 亚洲黑丝在线| 加勒比海成人视频网 | 亚洲欧洲无码一区夜| 日本精品网站在线中文| 亚洲色阁| 天天狠操| 强乱老妇中文字幕| 97在线观看播放视频| 日本三级R| 欧美性性性| 老鸭窝成人免费毛片视频| 欧美日韩97| 99色综合| 久久人妻丝袜一区二区三| a天堂视频| www.久久最新地址| 9Ⅰ超碰| 草草影院日本第一页| 国产精品干干干| 一级A片女人高潮叫床| 久久久无码av精| 日本三级精品| a级成人毛片免费视频高清| 91大胆欧美| 青青操在线视频| 国产隔壁老王影院在线| 另类小说五月天| 日韩人妻丝袜美腿中文| 第四色奇米影视777| 视频二区美腿丝袜制服人妻欧美| 欧亚揄拍偷拍精品视频 | 九九国产热| 久久免费少妇| 人妻少妇色综合| 日韩欧美~中文字| 国产操逼逼网| 五十路人妻在线| 国产一区二区三三视频| 屌妞视频久久久久久久久久久久| 国产女人视频三四五区| 无遮挡猛进视频免费无限观看| 亚洲欧美精品久| 中文字幕日韩专区精品系列| 在线啊啊啊啊| 久久精品国产精品一区| 日韩人妻网站| 日本1区2区不卡视频| 久热久一区二区三区| 91亚洲网| 欧美无圣光在线| 欧美操人视频| 黄呦呦在线| 国产精品网址| 伊人精品国产| 国产亚洲综合欧美一区| 青青久久艹| 亚州操操穴网| 国产精品亚洲天堂网址| yazhouzaixian| 二色av| 超碰人妻久久| 97亚洲一区| 日韩性爱视频在线免费观看| 综合天天网| 中国探花熟女| 日韩欧美女求操每天更新| 男人的天堂啪啪啪啪啪蜜桃不卡| 欧美呦呦性爱| 青草伊人久久| 91麻豆天美国产欧美| 成年无码动漫av片无尽在线| 亚洲色图美腿丝袜| 91操人视频| 性色AV网站| 9999久久久久| oumeisetu综合| 色操逼网| 精品999999| av东京热男人的天堂| 丰满的三级少妇欧美久久久| 久久久久久网址| 欧美中字不卡| 9久久9综合| 久久久久国产一区二| 麻豆成人影音在线| 日本精品九九九| 天天日日舔舔| 国产一级黄色片在线观看| 91色香| 色娱乐色呦呦夜夜夜夜av| 大香蕉黄色一区| 欧美国产精品久久九九| 日本熟妇自慰性高潮一区二区三区| 色九月| 成人av影院在线观看| 一区二区视频在看| 久久机热| 久婷婷一区| 日韩AV片| 成人av动漫在线观看| 日韩成人高清一区二区| 久久香蕉国产线看观看亚洲女人 | 中文字暮97| 日韩国产成人自拍视频| 亚欧无码线免费观看视频| 女上位精品在线| 人人摸人人干| 日本曲间由美性生活片| 国产农村一一级特黄毛片| 黄片免费视频2019| 国产精品96| 国产97av| 国产精品一区二区麻豆| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 久久久久久久久久久久97 | 国产自制av蜜乳| 欧美性性性| 2020中文字幕在线| 久久高清无码夜夜操| 9热9热综合网| 欧美色图私拍91| xxx亚洲午夜天堂| 美女啊啊啊啊啊啊啊| 色色色综合网| 国产熟女少妇一区| 国产免费一区二区三区最新不卡| 五月天婷婷基地| 99人人干| 午夜经典| 人妻少妇精品久久久久久| 美女91色黄18| 中文精品少妇天堂| 人妻喷水| 欧美日韩中文字幕不卡| 人妻精品一区二区| 91亚洲欧美| 中国操逼无码| 欧美日韩日产免费网站看| 国产一进一出视频网站| 国产宅男宅女在线观看| 色噜噜人妻丝袜a∨先锋影| 欧美日韩中文亚洲v在线综合| 国产九九九九九九九九| 日韩中文字幕视频在线观看| 日本久久99| 亚洲欧美九九九| 亚洲男人的天堂AV| 97超碰中文| 在线五区| 91色插| 欧美性爽xyxOOOO| 秋霞免费无码视频日韩A片| 日韩一级性爱无码| 欧美黄色片在线播放| 在线岛| 天天日天天干天天整| 色综合色色| 亚洲不卡不卡中文字幕不卡| japan日本高清乱xxxx| 久久精品国产亚洲AV成人直播| 亚洲日本韩国在线| 精品人妻一区二区免费蜜桃| 操老熟女AV| 伊人久久AV诱惑悠悠| 91看黄片| 人妻中文在线| 欧洲精品一区二区三区| 大香蕉懂9| 成人自拍三级在线观看| 国产成人网站在线观看| 中文字幕片| K8久久久久| 国产一区二区在线播放量| 再深点灬舒服灬太大了好硬好爽| 国产成人亚洲精品无| 一类无码操逼视频| 午夜精品99久久久久传媒| 亭亭在线资源| AAAA级日本片免费视频| JULIA一区二区三区在线播放| 少妇蜜汁| 精品美女少妇一区二区| 欧美激情性爱视频网站| 日韩传媒在线| 欧美色图电影| 性感女人网页在线观看视频| 搡老女人老妇女AAA一VU麻豆| 中文精品少妇天堂| 国产美女高潮视频| 久久久无码精品人妻二区| 欧美1727免费观看视频| 欧美亚洲高清不卡| 亚洲 欧美 精品专区 极品| 免费A V在线| 97精品久久久久中文字幕| 又大又大又大又粗爽高潮观看 | 精品久久視頻在线| 欧美体内射精| 欧亚成人| 9久久美女首页| 精品人成视频在线观看| 精品久久久久久亚洲| 蜜臀99久久精品久久久久久| 亚洲中文国际强奸字幕| 国产精品视频在线播放| 日韩黄片影院| 啊啊啊啊啊在线视频| 东北少妇高潮zzzz| 久久久久久中文字幕中文字幕最新| 国产一区二区在线看| 日本欧美亚洲高清在线看| 中文字幕精品久久久久人妻红杏ⅰ| 2020久久免费视频| 精品免费1| 伊人天天久久动态图| 色与欲影视| 色色五月天婷婷| 欧美亚洲系列| 爱爱60秒免费视频| 亚洲婷婷丁香在线| 久久久久久大| 日韩欧美午夜一区二区| 欧美熟妇操操视频| 国产宅男宅女在线观看| 久久久精品一区二区| 久久一级无码精品毛片6| 国产人妻精品一区二区三区秋霞 | 日韩福利综合一区| 久久骚少妇| 欧美极品性爱天天射| 超碰久久精品| 亚洲色久| AAAA级日本片免费视频| 欧美天堂日韩三级国产传媒| 强奸乱伦免费网站| 神马久久69| 人人操人人摸人| 欧美综合天堂| 宅男午夜在线视频| 人人妻人射| 精品在线78| 久久久艹艹艹| 中国国产精品一区视频| 999色欧美中文字幕| 天天欧美色| 亚洲色系另类精品国产| 久久精品一区二区三区蜜桃臀| 色官网在线| 综合色好色| 妇人噜噜| 九九色热| 中文字幕精品一区二| 91爱欧美| 日韩性色b| 一类无码操逼视频| 亚洲图片小说欧洲| 欧洲亚洲人妻无码中字久久三区四区| 成年人一级黄色毛片大全在线观看| 黑白配性爱AV成| 亚洲色图 欧美热图 清纯唯美 另类自拍| 岛国片在线播放| 91中出在线| 欧美中文字幕一区| 99操逼| 午夜欧美J进J出白浆流出久久久| 殴美大黄片| 午夜精品一区二区三区三上悠亚| 97视频在线免费| 亚洲中文日韩欧美大香蕉视频| 欧洲精品二区| 91精品久久久久久77777| 亚 欧 美 综合| 强奸乱伦中文字幕AV| 久久久蜜桃臀无码视频| 蜜臀一二三区| 日韩午夜国产| 黄色网址久久精品欧美喷水| 大色综合网| 人人看人人插| 97精品网| 综合亚州欧美| 色阁阁AV综合网| 国产美脚女优尤物在线观看| 狠狠干综合| 在线看片国产精品每日更新| 国产无码精品成人| 九九九九久久久久| 久久久啊啊啊| 欧洲站一级二级三级h| 蜜臀久久在线视频| 国产美脚女优尤物在线观看| 色五月婷婷麻豆在| 综合熟妇一区二区三区| 精品久热| 欧美顶级黄色大片免费| 懂色中文一区二区三区| 91超碰在线| 久久久555| 超碰 欧美| 天天天堂影视日韩亚洲91| 日本一天色道久久久精品视频| 久久香蕉国产传媒一区剧情天美| 欧美性爱在线无码| 国产成人精品日本视频| 久久av成人无码免费| 18禁精品网站在线看| 草草影院最新网址| 手机在线中文字幕国产| 欧美精品成人在线播放| 再深点灬舒服灬太大了添视频| 久久 国产 无码| 97中文超碰| 亚洲国产精品久久久久久久久久| 色婷婷影院| 五月天激情小说| 嗯啊免费视频| 中文字幕在线观看第二页| 理论久久婷婷网 8| 性色高清在线| 蜜桃精品视频一区| 超碰97首页| 中文字幕第7页| 天堂性色| 精品无码一区二区三区色欲| 玖玖爱在线视频免费观看| 97精品一区二区视频| 日韩免费一级性爱视频| gogogo免费高清看中国国语| 久久久亚洲高清不打码| 天天躁日日躁XXXXYY| 国产免费一区在线观看| 日韩有码一区三区| 色九月综合| 校园春色中文字幕AV| 高清孕妇孕交 交孕妇| 91色亚洲| 国产精品白丝在线播放| 91在线视频观看国产| 怡红院一区二区熟女人妻| 五月婷婷深深爱| 宅男午夜在线视频| 极品AV网站在线观看| 男人的天堂三级| 色臀av| 国产久久成人| 韩国一级婬片A片AAAAA| 91亚州日韩高清| 69人妻精品丰满熟女区| 天天操天天7| 午夜精品久久99蜜桃的功能章节| 日韩强奸av| 国产综合操逼高清| 手机不卡视频不卡在线一二三区| 天天激色| 九九九久久久| 操逼网站视频漫画国产| 久9久| 亚州黄站| 日韩在线地址一| 国产亚洲色婷婷久久99精品91葵花宝典 | 一区二区高清视频| 国产一区二区精品久久99| AA丁香综合激情| 亚洲综合九| 久久久久久久精| 99精品丰满人妻无码| 四虎视频在线观看| 97超碰色| 玖玖爱综合| 亚洲日韩电影| www.超碰| 欧美色www亚洲国产阿娇要播| 天堂伊人久久| 夜夜嗨一区二区| 国产成人精品午夜福利| 久久性爱视频免费看| 狠狠爱综合| 欧美精品三区| 26uuu最新| 欧美国产日韩清纯唯美| 职场同事知名国产国产精品久久欧美日韩 | 人妻出轨一区二区三区| 国语少妇精| 天堂8在线新版官网| 国产乱弄免费在线视频。| 天天做天天爱| 六月婷婷激情| 中文字幕人妻丝袜乱一区三区| 日韩欧美tv一区二区在线观看| 国产老熟女| 99国产精品| 韩国久久97| 色香天天| 婷婷丁香五月综合| 亚洲猛交| 福利在线黄片| 久久久久久久久久久久欧美日| 免费国产电影一区二区| 国产蜜臀精品一区免费尤物| 78超碰| 日本免费中文一区二区三区四区| 天天影视91看看| 亚洲操人| 超碰在线日韩一区| 亚洲精品精品一区二区| 久久九操在线观看| 三级色综合| 97超碰免费人人性爱| 超碰国产精品无码| 欧美狠狠操| 欧美综合网| 久久久久久大| 福利五区| 一区二区三区精品视频| 亚洲 无码 有码 中文字幕| 国产h片在线观看视频| 亚洲综合图片在线| 欧美日韩中文亚洲v在线综合| 97在线欧| 性爱视频久久| 国产极品馒头逼| 天天操天天射青青草| 亚洲av青草久久一区二区| 天美av在线观看| 国产免费黄色一级大片| 啊啊啊啊二区好大| 日韩成人精品视频自拍| 性欧美第一页| 国产精品天美传媒| 91成人高清在线观看| 天堂资源站| 亚洲精品成人| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 91美女中出| 色吧5亚洲| 丰满人妻一区二区中文| 色欲天天综合网| 亚洲天堂精品日韩电影| 欧日韩在线观看| 日韩人妻无码专区| 永久电影三级在线观看| 精品无码人妻一区二区免费蜜桃| 7777欧美成是人在线观看| 成人性生活高清视频在线播放| 久久精品视频久久久| 久久 亚洲 日韩 人妻| 91AV天美在线视频| 五月丁香影院| 成人26uuu| 欧美久久人体| 少妇六月天| 色狠狠综合| 久久久久久久久久va| 国产精品第一页国产大屁股视频免费区i| 东京热免费视频| 天天插夜夜操| 性一级黄色录像片网站导航| 97欧美色资源| 久久日韩毛| 成人三级片无码| 欧美性爽xyxOOOO| 快播久久人人aV| 啊啊啊啊啊在线视频| 亚洲超碰在线| 99国产精品视频尤物| 亚洲自拍97| 综合大香蕉美。| 少妇一区二区三区在线观看| 精品久久99| 色婷婷视频| 青娱乐二区免费| 亚洲激情在线| 日本道日本道中文字幕日本道最新日本道在线观看 | 久久免费9| 中文字幕伊人| 在线天堂999| 激情开心五月天| 亚洲一本色道中文无码aV天美| 亚洲高清视频在线免费观看| 亚洲中文丝袜美腿诱惑字幕| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 亚洲夜色在线| 国产精品一区二区黄片| 激情无码日韩| 国产中文字幕在线点播| 婷婷婷婷婷婷久久久久| 97超碰9| 欧美丰满少妇交换91欧美精品| 美女啪欧美一区| 欧美日日网| 色色色综合| 五月婷在线| 欧美综合区| 国产激情av女片自拍| 九九综合久久中文字幕| 爱妃国产亚洲视频中文字幕| 亚洲天堂一区| 好色综合| 欧美人黑A片无码免视费| 97在线免费看视频| 97欧美在线| 超碰97欧美| dy888午夜老子影视达达兔| 精品传媒在线一区| 国产白嫩精品久久| 大吊色| 黄色AAAAAAAAAAA大片| 大香蕉综合在线| 巨乳特殊服务按摩| 91欧美高清| 99久久婷婷丁香| 把腿张开老子CAO烂你| 精品国产Av无码久久久伦古装 | 极品出轨视频网站| 日韩性爱再线视频| 日韩欧美中文| 91三级理论片播放器| 91精品久久综合熟女| 国产久久天堂资源| 手机在线大香蕉| 欧美综合第一页| 91综合在线| 欧美性爱日韩高清| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 亚洲 欧美 另类 综合 偷拍| 大吊色| 男人的天堂日本东京热| 97天天在线| 操一对老熟妇爽上天视频| 91人人操| 91亚洲色人| 国产网站在线播放| 五月天色色网站| 国产999精品久久久久久| 97色在线观看| 婷婷另类小说| 女人天堂网| 东京热一区二区中文字幕| 日韩人妻一区二区| 色在线亚洲视频www| 欧美黄色大香蕉一区二区| 九九热最新| 欧美在线啊啊啊| 久久久少妇诱惑精品视频| 鸥美中出| 99这里只有精品国产| 国产青青美女玩逼视频| 爱欲AV| 尤物国产一区在线观看| 久草福利在线资源站| 九九热精品| 国产精品国产| 超碰97综合| 中文字幕在线免费观看2| 香蕉欧美| 欧美亚洲20p| 又大又长又粗又爽又黄| 另类在线| 中文字幕天天天天天| 青青草无码视频| 日躁天天爽爽| 狼狼色丁香久久婷婷综合五月| 欧美男女午夜啪啪| 免费公开人人操| AV一区观看| 国产精品蜜乳AV| 亚洲字幕一区二区| 丝袜大香蕉| 91精品电影18| 婷婷香蕉欧美在线一区二区三区| 欧美性高潮| 亚洲综合另类| 国产精品一区二区麻豆| 青青草日本中文字幕| 日本不卡一区二区三区| 亚洲se91| a天堂视频| 99re在线观看| 91久久久久久久久18| 乱伦系列一区二区| 在线亚洲精品久久久| 天天澡天天爽日日AV| 国产精品熟女丝袜一区二区| 亚洲欧美日产国产91毛片| 欧亚日韩中文在线| 人妻中文在线| 蜜桃狠狠色伊人亚洲综合 | 自拍偷拍 日韩欧美| 婷婷五月天伊人| 亚洲精品97久久中文字幕| 国产女人极品高潮毛片| 熟妇一区二区三区| 97色碰| 91校园春色长篇| 国产精品一二三| 亚洲色 国产 欧美 日韩| 黄网站黄视频网站进入口| 亚洲欧美综合| 后入 亚洲 美女 射| 天堂综合网| 久久99热这里只频精品6学生| 日韩精品人妻中文字幕不卡乱码| 2021久久国产综合精品青草| 99蜜桃臀久久久欧美精品网站| 人妻干天天| 久久久久久久久久久999| 亚洲精品白浆高清久久久久久 | 欧美九九九九九| www久久久| 9Ⅰ超碰| 欧美色棕合| 舔足天天操天天射| 性站| 极品国产内射| 秋霞男人网| 亚洲激情综合另类男同| 97精品第3页| 国产精品嫩草影院免费| 搡老女人老91妇女熟女| 小情侣高清国产在线视频| 亚洲91射| 狠狠操狠狠插| 曰韩人妻中文字幕在线| 亚洲欧美九九九| 中文字幕一区二区免费在线| 蜜屁Av| 亚洲国产高清福利视频| 国产又大又粗又长视频| 国产无套粉嫩白浆在| 精品超碰国产| 激情五月综合| 美欧色综合| 亚洲国产精品久久久久婷婷青年| 电家庭影院午夜69久久夜色精品国产69乱| 日韩在线AB| av在线观看不卡网站| 在线小说视频一区| 日本天天操| 老司机午夜精品视频| 免费网色网站| 亚洲一区中文字幕一区| 亚洲色狠| 午夜毛片高清免费不卡| 亚洲最大无码中文字幕网站 | 国产精品无套内谢| 国产AV线| 91亚洲黑人| 亚洲一区操| 色香91| 97资源超碰| 夜夜天天噜狠狠爱2021| 清纯唯美综合| 午夜福利在线视频1000| 美女自卫慰黄网站免费| 色综合av综合久久| 日韩亚洲97| 97蜜桃综合| 囯产操逼片| 女沟厕偷窥piss小便| 黄色一区三区| 人妻一区二区三区| 免费a在线播放v| 成全动漫视频观看免费下载| 91亚洲狠狠色| 狠插 制服 自拍| 99精品在线播放| 亚洲欧洲综合av在线| 91中出视频| 国产亚洲日本| 久久久久久亚洲精品中文字幕人妻| 日韩免费大片一级播放| 92久久| 99国产精品自在自在| 美女露胸露屁股| 女人高潮抽搐喷水视频网站| 精品蜜乳AV免费观看| 国产精品夜夜夜| 日韩国产十八禁| 日韩精品 资源| 男人的天堂一区三区| 欧美十八禁视频| 60秒不遮不挡| 九九九久| 69久久久久久久久久久久久| 青娱乐 成人娱乐在线| 九九色婷婷| 亚洲成熟国产精品美女| 亚洲 小说 欧美 激情 另类| 欧美日韩久久精品爱爱| 国产日韩中文字幕欧美| 另类av综合久久| 动漫片子网站3黄| 天天色综合图片| 99久久婷婷国产综合精品草原| 亚洲成a人在线观看久| 欧美性生活男人的天堂| 久久久亚洲欧美综合| 日韩免费av片高清无码| 免费视频97| 97亚洲自在精品在线观看| 亚洲综合伊人| 亚洲日韩XXX| 天堂资源站| 天天看高清麻豆| 97日视频| 330Dv国产女人终合视频极品人与兽| 97久久精品亚洲| 色情综合网| 国产强奸超碰AV| 可以在线观看AV的网站| 免费看国产曰批40分钟怎么下载| 澳门黄片一香蕉视频| 亚洲不卡三级手机播放| 日韩在线国产字幕| 九九九久久久| 亚洲av成人精品一区| 天天看天天日天天操| 国产激情视频一区区三区| 亚洲无 码A片在线观看麻豆| 九九热九九| 国产一级高清免费观看| 又粗又长又大国产不卡| 中国AAAAAA黄色片| 色欲三区| 精品国产人成在线| 日本国产欧美高清在线| 亚洲欧美日韩精品久| 超碰人人干| 懂色AV一区二区三区| 91在线美女| 日韩久久艹|