欄位修改記錄操作日誌的實現
資料敏感欄位的修改往往需要記錄操作日誌,例如客戶表中的姓名、身份證等資訊,需要系統記錄下修改記錄,方便以後溯源。
準備工作:
1、在白碼建立一個資料表,根據各自需求新增若干個欄位,並準備若干條資料以便測試。
2、建立一個日誌表。新增欄位:時間、資料、欄位、操作前、操作後、操作人(關聯-使用者)。
實現步驟:
1、新建一個“修改資料表”的功能。
2、點選功能進入編輯介面,在修改功能的基礎上新增一個獲取當前使用者步驟:點開步驟設定,將id設為查詢$$USER。
3、新增程式設計步驟。點開步驟的“設定>程式設計”進入程式碼編輯介面。
4、新增修改前資料、修改後資料、當前使用者的引數,並在程式碼中引用。
5、獲取當前時間。
//當前時間 let date = new Date(); let YY = date.getFullYear() + '-'; let MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; let DD = (date.getDate() + 1 <= 10 ? '0' + date.getDate() : date.getDate()) + ' '; let hh = (date.getHours() + 1 <= 10 ? '0' + date.getHours() : date.getHours()) + ':'; let mm = date.getMinutes() + 1 <= 10 ? '0' + date.getMinutes() : date.getMinutes(); let time=YY+MM+DD+hh+mm;
6、新增資料表中需要記錄修改操作的欄位id資料。
//資料表欄位id let fields = [ "5ff44e3fdd9ec8350b2d24df",//欄位1, "5ff44e45cf250d350cc124d2",//欄位2, "5ff44e51cf250d350cc124d4",//欄位4, ];
欄位id獲取方式為field_資料表>欄位名:
7、新增可根據欄位id獲取欄位名的map
//資料表欄位名 let fieldNameMap = { "5ff44e3fdd9ec8350b2d24df": "欄位1", "5ff44e45cf250d350cc124d2": "欄位2", "5ff44e51cf250d350cc124d4": "欄位4", };
8、是否需要記錄欄位修改的判斷邏輯
fields.forEach(field => { //對每個欄位進行判斷 if (before[field] != after[field]) { //修改前後不相等即有修改,需進行日誌記錄 } });
9、建立日誌記錄
{ "5ff44e6ecf250d350cc124d7": time,//時間 "5ff44e80cf250d350cc124d8": after["5ff44e5ccf250d350cc124d5"],//資料ID "5ff44ea0cf250d350cc124d9": fieldNameMap[field],//欄位 "5ff44ea5cf250d350cc124da": before[field],//操作前 "5ff44eaccf250d350cc124db": after[field],//操作後 "5ff44eb5cf250d350cc124dc": user._id,//操作人 }
10、至此日誌功能已全部實現。完整程式碼:
async function runProcess($model = model, $plugin = plugin, $params) { let before = await $params.before;//修改前的資料 let after = await $params.after;//修改後的資料 let user = await $params.user;//當前使用者 //當前時間 let date = new Date(); let YY = date.getFullYear() + '-'; let MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; let DD = (date.getDate() + 1 <= 10 ? '0' + date.getDate() : date.getDate()) + ' '; let hh = (date.getHours() + 1 <= 10 ? '0' + date.getHours() : date.getHours()) + ':'; let mm = date.getMinutes() + 1 <= 10 ? '0' + date.getMinutes() : date.getMinutes(); let time = YY + MM + DD + hh + mm; //資料表欄位id let fields = [ "5ff44e3fdd9ec8350b2d24df",//欄位1, "5ff44e45cf250d350cc124d2",//欄位2, "5ff44e51cf250d350cc124d4",//欄位4, ]; //資料表欄位名 let fieldNameMap = { "5ff44e3fdd9ec8350b2d24df": "欄位1", "5ff44e45cf250d350cc124d2": "欄位2", "5ff44e51cf250d350cc124d4": "欄位4", }; fields.forEach(field => { //對每個欄位進行判斷 if (before[field] != after[field]) { //修改前後不相等即有修改,需進行日誌記錄 $plugin.data.saveData("5ff44e6acf250d350cc124d6", { "5ff44e6ecf250d350cc124d7": time,//時間 "5ff44e80cf250d350cc124d8": after["5ff44e5ccf250d350cc124d5"],//資料ID "5ff44ea0cf250d350cc124d9": fieldNameMap[field],//欄位 "5ff44ea5cf250d350cc124da": before[field],//操作前 "5ff44eaccf250d350cc124db": after[field],//操作後 "5ff44eb5cf250d350cc124dc": user._id,//操作人 }); } }); }
效果:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981626/viewspace-2748482/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- thinkphp 利用中介軟體 實現日誌操作記錄PHP
- Rust 實現日誌記錄功能Rust
- 如何優雅的記錄操作日誌?
- Spring boot學習(六)Spring boot實現AOP記錄操作日誌Spring Boot
- 如何記錄可讀性的操作日誌?
- Java日誌記錄幾種實現方案Java
- Spring Boot利用AOP獲取使用者操作實現日誌記錄Spring Boot
- 如何優雅地記錄操作日誌
- 如何優雅地記錄操作日誌?
- 基於AOP和ThreadLocal實現日誌記錄thread
- 操作日誌記錄(包括輸出至自定義日誌檔案)
- 一種簡化操作日誌記錄方案
- Swoft AOP 記錄使用者操作日誌
- 微服務體系操作日誌如何記錄?微服務
- Camstar MDB setfieldex 修改建模欄位不記錄Audit TrailAI
- 介面自動化之實現日誌記錄封裝封裝
- 日誌記錄器
- ThinkPHP日誌記錄PHP
- spring-boot-route(十七)使用aop記錄操作日誌Springboot
- 在Golang中使用Zap實現結構化日誌記錄Golang
- 運用Spring Aop,一個註解實現日誌記錄Spring
- uni-app小程式(快手)日誌列印坑位記錄APP
- Laravel sql 日誌記錄LaravelSQL
- mysql誤修改全表記錄,使用binlog日誌找回資料MySql
- NetCore的全域性日誌記錄NetCore
- python日誌記錄器的配置Python
- mysql修改表欄位學習筆記MySql筆記
- 實現後臺管理系統的操作日誌功能
- awk 中的欄位、記錄和變數變數
- 【設計模式工程實踐】裝飾器模式記錄對訂單管理的操作日誌設計模式
- 日誌記錄模組logging
- monolog 日誌記錄器解析Mono
- LoggerMessageAttribute 高效能的日誌記錄
- LightDB不記錄WAL日誌的表
- Spring基於註解的環繞通知實現請求方法日誌記錄Spring
- Spring Boot AOP 掃盲,實現介面訪問的統一日誌記錄Spring Boot
- 填報表怎麼跟蹤使用者操作,記錄日誌?
- 禁用 Logback 中特定類的日誌記錄