跳转至

私密分享与权限边界验收

历史记录 / Historical record:本文保留当时的计划、研究或验收证据,不代表 0.11 当前能力全集。现行说明见 文档入口;英文入口见 English overview。

新建私密分享将清单及附件用 AES-256-GCM 加密。短口令仍是固定长度的云盘分享凭据;公开链接只返回密文,随机密钥放在独立私有资料库,由清华云盘账号权限控制。密钥上传直接使用内存字节,不落临时文件。更换接收人会更换口令和密钥,撤销旧链接;普通改名保留口令。

中断恢复保存在 onethu.share.rotations.v1,只包含云端引用和元数据。旧密钥删除成功、旧链接删除失败时保留新分享,重启后仍能重试完成,不会把两份内容都清掉。组织稳定分享位的撤销失败也保留可重试记录。

已执行

  • node tools/private-share-browser-test.mjs:四个独立浏览器上下文,真实应用模块与 WebCrypto,Node 端持有身份及 ACL。涵盖匿名、正确账号、错误账号、伪造本地邮箱、附件解密、更换收件人、重启恢复、撤销中断与重试、上传失败清理、旧码失效、组织稳定分享位。最新结果见 report.json。它是模拟服务边界,不能替代真实双账号联调。
  • Rust seafile::tests::live_private_share_boundary:真实清华云盘单账号、一次性隔离资料库。检查所有者身份、权限列表、纯内存上传、授权读取、匿名拒绝、公开密文读取、附件字节接口、重复删除和测试资源清理。
  • 真实测试发现并修复:建库响应使用 repo_id;库详情的 owner 是显示名,必须从资料库列表读取真实账号标识。两处都不能由原来的假云盘夹具发现。
  • 组织权限同步在开始前检查资料库所有者和可发现的独立群组/全员/子目录共享、公开链接;存在其他授权入口时明确失败,避免仅删除一条用户共享就宣称完全撤权。不自动删除无关的共享授权。

双账号联调入口

用户目前没有第二个测试账号,因此保留以下显式入口,未把它们标为通过:

cd apps/desktop/src-tauri
# 从本机安全环境注入两个不同账号的 Token,脚本不输出 Token。
cargo test --lib seafile::tests::live_two_account_permissions -- --ignored --nocapture

所需环境变量:TSINGHUA_SEAFILE_TOKEN、TSINGHUA_SEAFILE_RECIPIENT_TOKEN。此测试只创建独立私密测试库,检查读写授权、降为只读、撤销与幂等清理。

GitLab 联调使用 tools/org-collaboration-live.mjs,说明见组织协作计划。已读取或另行复制的内容无法追回;旧版本已经发出的明文受限分享在再次分享或点击「升级并复制」时会轮换为加密分享,旧链接随之撤销。已经散发且尚未由发送者升级的旧链接不能被接收端追溯变成加密内容。