危险动作守卫

删文件、覆盖文件、付款前必须先出确认卡片并等用户同意;付款类永远不自动执行。所有执行过的危险动作写入审计日志。

危险动作守卫

结论先行


预览卡片 → 用户说"确认" → 加 --confirm 执行 → 写审计日志

不带 --confirm 的调用只出卡片,绝不执行。 这是我给自己设的闸,不依赖用户记不记得提醒。

一、命令


$NODE = "C:\Program Files\sanshan-kaiwu\resources\runtime\node.exe"
$G = "<产品仓库>\tools\danger-guard.mjs"

# 1) 删除:先预览
& $NODE $G --action delete --path "C:\work\旧报价.xlsx"

# 2) 用户确认后再执行
& $NODE $G --action delete --path "C:\work\旧报价.xlsx" --confirm

# 覆盖(会自动把原文件备份成 .bak-时间戳)
& $NODE $G --action overwrite --path "C:\work\合同.docx" --source "C:\work\新版.docx" --confirm

# 付款类:永远拒绝,只提示人工
& $NODE $G --action pay --summary "给客户退款 2000 元"

二、卡片里有什么

| 字段 | 说明 |

| --- | --- |

| 动作 | 删除 / 覆盖 |

| 目标 | 完整绝对路径 |

| 状态 | 是否存在、大小、修改时间 |

| 来源 | 覆盖时的源文件及状态 |

看到卡片你就能判断"是不是这个文件、是不是这一版"。

三、审计日志

所有调用(含预览)写入 logs/danger-actions.log:


2026-11-07T10:29:39Z {"action":"delete","path":"...","executed":true}

做过的事,事后能查。

四、已验证记录(2026-11-07)

| 场景 | 结果 |

| --- | --- |

| 删除预览(无 --confirm) | ✅ 只出卡片,文件仍在 |

| 付款请求 | ✅ 拒绝并提示人工处理 |

| 删除执行(--confirm) | ✅ 文件被删,日志记录 executed:true |

| 覆盖 | 已实现(原文件自动备份为 .bak-时间戳),待真实场景验证 |

五、红线

| 不做 | 原因 |

| --- | --- |

| 不带 --confirm 就删/覆盖 | 不可逆 |

| 付款、转账、红包 | 一律人工 |

| 覆盖不留备份 | 出事无法回退 |

| 删除系统目录、Program Files、Windows | 会毁掉系统 |

验收清单