后端數據權限校驗:提升效率,避免冗余查詢
許多后端系統在設計數據權限控制時,常常面臨一個挑戰:如何高效地驗證用戶對特定數據的操作權限?本文將探討一種優化方案,避免低效的重復數據庫查詢。
假設數據庫中存儲著一些數據,每條數據都關聯一個創建者 createUserId。前端請求數據修改或刪除時,只提供數據 id 和用戶 userId(通常通過 JWT 等機制從請求頭獲取)。示例數據如下:
[ { "id": "100", "name": "data1", "createUserId": 1 }, { "id": "101", "name": "data2", "createUserId": 2 }, { "id": "102", "name": "data3", "createUserId": 3 }, { "id": "103", "name": "data4", "createUserId": 4 }, { "id": "104", "name": "data5", "createUserId": 4 } ]
如果用戶要刪除 id 為 103 的數據,前端只提供 id 為 103 和 userId(例如 4)。直接根據 id 刪除是不安全的,因為 createUserId 容易被偽造。傳統的做法是先根據 id 查詢數據,再比對 createUserId 和 userId,只有相等才允許操作。這種方法需要兩次數據庫查詢,效率低下。
更優的方案是優化權限校驗流程。 避免每次操作都進行數據庫查詢驗證權限。 更好的方法是在用戶登錄成功后,將用戶的權限信息(包括 userId 及其關聯的權限)存儲在服務器端,例如使用 ThreadLocal 或類似機制,將其綁定到當前請求線程。 這樣,后續任何數據操作前,可以直接從 ThreadLocal 獲取用戶信息,無需重復數據庫查詢。
這種方法顯著提升效率,簡化代碼邏輯。處理數據修改或刪除請求時,直接從 ThreadLocal 獲取用戶信息,根據預設的權限規則進行判斷,無需再次查詢數據庫,從而保證系統安全性和效率。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END