Aetherworld

P0.5 · 系统报告

后端安全闭环报告

本轮把已经在前端落地的安全边界(Secret 脱敏、Full60 / Founder-only / Workspace Dump 过滤、社交发布闸)推进到云端表结构与 RLS 策略,并新增后端二次校验入口。

一、云端表结构

表名RLS策略状态说明
social_profiles已启用公开可读 / 本人增删改已完成展示型资料,所有登录用户可读。
social_posts已启用本人全权 / PUBLIC/UNLISTED 非 BLOCKED 可读 / FOUNDER_ONLY 仅 Founder已完成可见性 + QA 状态共同决定可读性。
social_reactions已启用关联帖子可见即可读 / 本人增删已完成点赞 / 收藏类型,唯一约束防重复。
social_comments已启用关联帖子可见即可读 / 本人增删改 / 需 allow_comments=true 才能新增已完成评论受帖子 allow_comments 控制。
social_collections已启用本人 / 公开可读 / 本人增删改已完成收藏集支持公开 / 私密。
social_publish_audits已启用本人可读 / Founder 可读全部 / 本人可写已完成PUBLISH / BLOCK / UPDATE 全量审计。

二、安全闭环检查项

Secret 脱敏 · BC-01
已完成已完成
Model Context Sanitizer

Chat / LLM Provider 出栈前已统一调用 sanitizeModelContext。

Workspace 保存 · BC-02
已完成部分完成
敏感字段弹窗

SecretConfirmDialog 已抽象,调用方接入 filterWorkspaceObjectForSave 后弹窗。Workspace 云同步本身仍为 P1。

社交发布 · BC-03
已完成已完成
前端发布闸

socialPublishPermissionGuard + secret 过滤 + Demo/匿名强制 PRIVATE。

社交发布 · BC-04
已完成就绪 / 待启用
后端二次校验 server fn

securePublishPost 已就位,写入 social_posts + social_publish_audits。当用户登录态可用时即生效。

RLS 边界 · BC-05
已完成已完成
PRIVATE / UNLISTED / PUBLIC / FOUNDER_ONLY

social_posts SELECT 策略已落实四种可见性,BLOCKED 状态自动隐藏。

权限 · BC-06
已完成已完成
Founder-only 读写

is_founder() helper + user_roles.role='founder'。需人工授予首位 Founder。

审计 · BC-07
已完成已完成
发布审计后端化

social_publish_audits 已就绪,本地审计仍保留作为离线 fallback。

权限 · BC-08
已完成已完成
匿名 / Demo 不得真实公开

RLS 要求 auth.uid()=author_user_id,匿名插入将被拒绝。

权限 · BC-09
已完成已完成
Chat 上下文不带 secret

sanitizeModelContext 在 LlmProviderRuntime 前置执行。

权限 · BC-10
已完成部分完成
Workspace 普通对象不含明文 secret

filterWorkspaceObjectForSave 已抽象;保存到 Cloud 仍待 PF-C1 完成。

徽标顺序:前端 / 后端。

三、仍需人工确认

  • 在 user_roles 表中为首位 Founder 账号插入 role='founder'。
  • 在客户端登录后,迁移 aetherSocialRuntime 调用从 publishPost 切换到 securePublishPost。
  • 评估 social_publish_audits 长尾保留策略(建议 180 天)。
  • PUBLIC 帖子未来如需匿名可读,需新增针对 anon 角色的 SELECT 策略(当前仅 authenticated)。

四、下一轮建议

  • P1:Workspace 云同步 + 多端冲突解决。
  • P1:social_posts / collections 列表分页 + 全文搜索索引。
  • P2:评论 / 点赞 / 收藏全部切换为 social_* 表。
  • P2:审计页提供导出 CSV,便于内部复盘。
首页输入会创建一个新对话会话 · Enter 发送 · Shift+Enter 换行