This document was written by AI and has been manually reviewed.
审核日志(Transparent Control)
本文档由 AI 撰写并经过人工审核。
Prism 会将与安全相关的操作记录到一个只追加(append-only)的审核日志中,并按三个作用域拆分。每个作用域仅对相应的负责人可见,并各自拥有实时 Webhook。
| 作用域 | 可查看者 | 记录内容 |
|---|---|---|
| Transparent User Control | 用户本人,以及站点管理员 | 自己的登录 / 授权 / 撤销访问 / 换绑 / 账户变更,以及自己拥有的应用的授权事件 |
| Transparent Team Control | 团队 owner / co-owner,以及站点管理员 | 团队中的所有编辑与人员变动,以及团队所拥有应用的授权事件 |
| Transparent Platform Control | 平台管理员 | 任何管理员操作 |
在哪里查看
- 用户 — 仪表盘 →通知 → 审核日志标签页。
- 团队 — 团队页面 →审核日志标签页(位于邀请与设置之间)。
- 平台 — 管理面板 →审核日志标签页。
- 以管理员身份查看任意用户 — Admin → Users → 管理 →审计标签页(
GET /api/audit/user/:userId/events)。
管理员可见性
站点管理员可以读取全部三个作用域。这不是模型上的漏洞,而是模型的另一半:当管理员对某个团队或账号执行操作时,记录会写入该作用域自己的日志,并标记 site_admin: true,使相应的负责人能看到别人对自己做了什么。一个能操作却看不到记录的运营者,只会产出无人核对的记录。
唯一不提供的是「以他人身份登录」。每一项管理员操作都带着操作者的名字;为他人签发的会话会把这些操作洗进用户自己的历史里。
导出
导出对每个作用域都可用,而不只是平台作用域:被要求就某事作出说明的团队,需要一份可以交出去的自己的日志;用户询问实例保存了哪些关于自己的记录,本质上是同一个请求。
GET /api/audit/<scope>/export?format=csv|json 接受与表格相同的筛选条件,因此导出的内容就是你正在查看的内容。上限 10000 条事件 —— 能拿到的截断导出胜过会超时的完整导出。CSV 中的时间戳是 ISO 字符串;JSON 导出保留原始的 Unix 秒。
每条事件记录的内容
每条事件都会存储并展示:
- 时间 — 事件发生的时间。
- 操作用户 — 执行操作的用户。展示解析出的名称,悬停可查看其 id。
- 操作 — 稳定的操作标识,如
user.login或team.member.add。 - 资源 — 受影响的对象,展示解析后的结果(如
用户 @wyf9)。悬停可查看资源类型 slug 与 id(如user / 36b3…)。 - 请求 IP — 仅展示前缀(IPv4
111.111.*,IPv62400:0000:*);悬停可查看完整地址。 - 客户端 — 仅展示解析出的客户端类型;悬停可查看完整 User-Agent。
- 查看详情 — 每行最右侧的按钮会打开弹窗,显示该事件的完整信息,包括原始元数据。
筛选
每个审核面板顶部都有时间区间筛选和操作类型筛选。点击任意行中的操作用户、操作或资源单元格即可设置对应筛选,清除筛选按钮可重置全部筛选。
Webhook
每个审核面板都有一个编辑 Webhook按钮(右上角),点击进入该作用域的 Webhook 管理页。Webhook 会将该作用域的审核事件实时推送到外部目标。提供三种预设:
Discord
填入 Webhook URL。事件以 embed 卡片形式发送。
Telegram
填入 Bot Token(必填),可选填 会话 ID 和 Thread ID。消息以格式化 HTML 发送。
通用 Webhook
填入 URL、方法(GET / POST)、请求头(JSON 对象)和请求体(用于 POST)。所有部分都支持 {placeholder} 动态值插值:
| 占位符 | 值 |
|---|---|
{id} | 事件 id |
{action} | 操作标识 |
{actor_id} | 操作用户 id |
{actor_name} | 操作用户名称 |
{resource_type} | 资源类型 slug |
{resource_id} | 资源 id |
{resource_name} | 解析后的资源名称 |
{ip} | 完整请求 IP |
{user_agent} | 完整请求 User-Agent |
{timestamp} | unix 时间戳 |
{metadata} | JSON 编码的元数据 |
{summary} | 一行可读摘要 |
每个 Webhook 都有一个事件字段:以逗号分隔的操作名称列表,或用 * 表示该作用域下的所有事件。
从旧 Webhook 系统迁移
旧的实例 / 用户 Webhook 功能已被本系统取代。管理员可在管理面板 → 设置 → 危险区域 → 迁移旧版 Webhook中将旧 Webhook 导入到新系统——每个旧 Webhook 会在对应作用域中变为一个通用 Webhook。该操作是幂等的,可安全地多次运行。