Files
PROJECT-CONTORL/openspec/changes/archive/2025-12-29-add-audit-trail/specs/audit-trail/spec.md
beabigegg 0ef78e13ff feat: implement audit trail module
- Backend (FastAPI):
  - AuditLog and AuditAlert models with Alembic migration
  - AuditService with SHA-256 checksum for log integrity
  - AuditMiddleware for request metadata extraction (IP, user_agent)
  - Integrated audit logging into Task, Project, Blocker APIs
  - Query API with filtering, pagination, CSV export
  - Integrity verification endpoint
  - Sensitive operation alerts with acknowledgement

- Frontend (React + Vite):
  - Admin AuditPage with filters and export
  - ResourceHistory component for change tracking
  - Audit service for API calls

- Testing:
  - 15 tests covering service and API endpoints

- OpenSpec:
  - add-audit-trail change archived

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 21:21:18 +08:00

3.2 KiB
Raw Blame History

ADDED Requirements

Requirement: Change Logging

系統 SHALL 記錄所有關鍵變更操作,包含誰在何時改了什麼。

Scenario: 任務欄位變更記錄

  • GIVEN 使用者修改任務的任何欄位(如截止日期、狀態、指派者)
  • WHEN 變更儲存成功
  • THEN 系統記錄變更前後的值
  • AND 記錄操作者、時間、IP 位址

Scenario: 專案設定變更記錄

  • GIVEN 管理者修改專案設定
  • WHEN 設定變更儲存
  • THEN 系統記錄所有變更的設定項目
  • AND 記錄操作者與時間

Scenario: 權限變更記錄

  • GIVEN 管理者修改使用者權限或角色
  • WHEN 權限變更生效
  • THEN 系統記錄權限變更詳情
  • AND 標記為高敏感度操作

Requirement: Delete Operations Tracking

系統 SHALL 追蹤所有刪除操作,支援軟刪除與追溯。

Scenario: 任務刪除記錄

  • GIVEN 使用者刪除任務
  • WHEN 刪除操作執行
  • THEN 系統執行軟刪除(標記 is_deleted = true
  • AND 記錄刪除操作與原因

Scenario: 附件刪除記錄

  • GIVEN 使用者刪除附件
  • WHEN 刪除操作執行
  • THEN 系統保留檔案於存檔區
  • AND 記錄刪除操作詳情

Requirement: Audit Log Immutability

系統 SHALL 確保稽核日誌不可竄改。

Scenario: 日誌寫入

  • GIVEN 需要記錄稽核事件
  • WHEN 日誌寫入
  • THEN 日誌記錄不可被修改或刪除
  • AND 包含 SHA-256 校驗碼確保完整性

Scenario: 日誌完整性驗證

  • GIVEN 稽核人員需要驗證日誌完整性
  • WHEN 執行完整性檢查
  • THEN 系統驗證所有日誌記錄的校驗碼
  • AND 報告任何異常記錄

Requirement: Audit Query Interface

系統 SHALL 提供稽核查詢介面供授權人員使用。

Scenario: 依時間範圍查詢

  • GIVEN 稽核人員需要查詢特定時間範圍的操作
  • WHEN 設定時間範圍並執行查詢
  • THEN 顯示該時間範圍內的所有稽核記錄

Scenario: 依操作者查詢

  • GIVEN 稽核人員需要查詢特定使用者的操作歷史
  • WHEN 選擇使用者並執行查詢
  • THEN 顯示該使用者的所有操作記錄

Scenario: 依資源查詢

  • GIVEN 稽核人員需要查詢特定任務或專案的變更歷史
  • WHEN 選擇資源並執行查詢
  • THEN 顯示該資源的完整變更歷程

Scenario: 稽核報告匯出

  • GIVEN 稽核人員需要匯出稽核報告
  • WHEN 選擇匯出 CSV 格式
  • THEN 系統生成報告檔案供下載

Requirement: Sensitive Operation Alerts

系統 SHALL 對高敏感度操作發送即時警示。

Scenario: 權限提升警示

  • GIVEN 使用者被授予管理員權限
  • WHEN 權限變更生效
  • THEN 系統發送警示給安全管理員
  • AND 建立 AuditAlert 記錄

Scenario: 大量刪除警示

  • GIVEN 使用者在 5 分鐘內刪除超過 5 筆資料
  • WHEN 偵測到異常刪除模式
  • THEN 系統發送警示給安全管理員

Scenario: 警示確認

  • GIVEN 管理員收到敏感操作警示
  • WHEN 管理員確認警示
  • THEN 系統記錄確認者與確認時間