Audit log
หน้านี้สอนอะไร
เก็บบันทึกว่าใครแก้อะไรเมื่อไร ใครเข้าสู่ระบบ และผู้ดูแลระบบทำอะไรไปบ้าง และวิธีตรวจว่าบันทึกไม่ถูกแก้
ควรอ่านก่อน: ผู้ใช้และการยืนยันตัวตน

เปิดใช้ใน config:
audit: true, // หรือ { keepDays: 365, values: true, failedLogins: 20 }การเปิดใช้จะเพิ่มตาราง audit-logs จึงต้องสร้าง migration (npx easy-cms migrate:create audit) จากนั้นผู้ดูแลระบบจะเห็น ตั้งค่า → Audit log และถ้าเปิดบทบาทจากหน้า admin ก็ให้บทบาทอื่นดูหน้านี้ได้ด้วย
ถ้าไม่เปิด audit log การ login ไม่สำเร็จ (login.failed, login.locked, sso.failed) ยังถูกเขียนลง log ของ server เป็นคำเตือน พร้อมอีเมลที่ลองและ IP address
บันทึกอะไรบ้าง
- เนื้อหา: การสร้าง แก้ไข เผยแพร่ ยกเลิกเผยแพร่ กู้คืน และลบเอกสารกับ global การอัปโหลด และการตั้งเวลา พร้อม field ที่เปลี่ยน และค่าก่อนกับหลัง เอกสารที่ถูกลบยังเก็บชื่อไว้
- การเข้าสู่ระบบ: การสร้าง admin คนแรก, login, login ไม่สำเร็จ (พร้อมอีเมลที่ลอง), ถูกล็อก, logout, ลืมรหัสผ่าน, ลิงก์รหัสผ่าน และ single sign-on (เข้าสู่ระบบ เชื่อม และยกเลิกเชื่อมบัญชี)
- การจัดการระบบ: ผู้ใช้ (รวมการเปลี่ยนบทบาทและการปิดใช้งาน), บทบาท, API key, backup ที่เริ่ม ดาวน์โหลด และลบ, อีเมลทดสอบ และการส่งซ้ำหรือลบรายการส่ง
แต่ละรายการบอก ใคร (อีเมลตอนนั้น ยังอ่านได้แม้ผู้ใช้ถูกลบแล้ว), ผ่านอะไร (ผู้ใช้ที่ login, API key ตามชื่อ, โค้ด หรืองาน ตั้งเวลา), IP address และเบราว์เซอร์ ส่วนการอ่านไม่ถูกบันทึก
การเปลี่ยนแปลงจากโค้ดของคุณผ่าน Local API (hook, plugin, สคริปต์ seed) ก็ถูกบันทึกด้วย เป็น โค้ด (ระบบ) หรือเป็น user ที่คุณส่งมา
ค่าที่เก็บ
- field ที่ซ่อน เช่น password hash ไม่ถูกเก็บเด็ดขาด รหัสผ่านใหม่แสดงแค่ว่า "เปลี่ยนรหัสผ่าน"
- rich text, blocks, array และ JSON แสดงแค่ว่าเปลี่ยน ค่าที่ยาวเกิน 500 ตัวอักษรถูกตัด
- ถ้าข้อมูลอ่อนไหว ใช้
audit: { values: false }เพื่อเก็บแค่ชื่อ field ที่เปลี่ยน
ในหน้า admin
- ตั้งค่า → Audit log เรียงรายการใหม่ไปเก่า กรองตามเหตุการณ์ collection ผู้กระทำ และวันที่ได้ กดเปิดรายการเพื่อดูค่า ก่อนและหลังของแต่ละ field ส่งออก CSV ดาวน์โหลดรายการที่กรองไว้ (สูงสุด 10,000 รายการ)
- หน้าของเอกสารแสดง กิจกรรม คือรายการล่าสุดของเอกสารนั้น พร้อมลิงก์ไปดูทั้งหมด
- แดชบอร์ดเตือนเมื่อ login ไม่สำเร็จหลายครั้ง ในหนึ่งชั่วโมง (
failedLoginsค่าเริ่มต้น 20), เมื่อบันทึกบางรายการไม่สำเร็จ และเมื่อการตรวจความถูกต้องไม่ผ่าน
ตรวจการแก้ไข
รายการแก้หรือลบผ่าน Easy CMS ไม่ได้ ลบได้อย่างเดียวคือรายการที่เก่ากว่า keepDays วัน (ค่าเริ่มต้น 365 ตั้ง 0 เพื่อเก็บไว้ ทั้งหมด) โดยลบจากเก่าสุด แต่ละรายการลงลายเซ็นด้วย EASY_CMS_SECRET ปุ่ม ตรวจความถูกต้อง (และการตรวจรายวันจาก งานตั้งเวลา) จะพบรายการที่ถูกแก้ในฐานข้อมูล และรายการที่หายไประหว่างรายการอื่น เมื่อใช้ plugin multi-tenant ปุ่มนี้ใช้ได้เฉพาะ admin ที่เข้าได้ทุก tenant
id ของรายการไม่ถูกใช้ซ้ำ การลบรายการล่าสุดจึงทิ้ง id ที่หายไว้ทันทีที่มีรายการใหม่เขียนต่อ การตรวจแต่ละครั้งก็เขียนรายการเองด้วย การตรวจครั้งถัดไปจึงพบได้อย่างช้าที่สุด และทุกครั้งที่ตรวจจะเขียนหนึ่งบรรทัดลง log ของ server พร้อมจำนวนรายการและ id ล่าสุด (Audit log checked: …) ไว้เทียบภายหลัง
สิ่งที่ตรวจไม่พบ: คนที่รู้ secret ของคุณด้วย ถ้าต้องการสำเนาที่ไม่มีใครในระบบนี้แก้ได้ ให้ส่งเหตุการณ์ออกไปที่อื่นด้วย เช่น ผ่าน webhooks
เขียนรายการจากโค้ด
await cms.audit.record({ action: 'invoice.sent', target: 'invoices', doc: invoice.id })ถ้าบันทึกรายการไม่สำเร็จ
การเปลี่ยนแปลงยังสำเร็จตามปกติ error ถูกเขียนลง log ของ server และแดชบอร์ดบอกว่าหายไปกี่รายการ
ขั้นต่อไป
- บทบาทและสิทธิ์จากหน้า admin: ใครดู audit log ได้
- ความปลอดภัย: สิ่งที่ระบบป้องกันให้เพิ่มเติม