共享账本
让一家人、一个团队、一个项目组共记同一本账。Owner 邀请、Editor 加入,实时秒级同步,每条交易都标记"谁记的 / 谁编辑的"。
⚠️ 前提:共享账本仅 BeeCount Cloud 后端支持。iCloud / WebDAV / S3 / Supabase 都是单人多设备方案,数据不在用户之间互通。详见 BeeCount Cloud 部署。
角色与权限
共享账本里有两类角色,Phase 1 只实现这两种(Viewer 只读 + Owner 转让推到 Phase 3):
| 角色 | 权限 |
|---|---|
| Owner(账本创建者) | 改账本名 / 币种、邀请新成员、踢人、删账本;同时也能跟 Editor 一样记账 |
| Editor(被邀请的成员) | 共记交易(创建 / 编辑 / 删除自己 + 别人的);不能改账本元数据、不能邀请、不能改 Owner 的全局分类 / 账户 / 标签 |
设计原则:Editor 用 Owner 的分类 / 账户 / 标签只读快照(SharedLedger 镜像表)。Editor 在共享账本下记 tx 时只能选 Owner 的资源,不能新建自己的。这样 Owner 不会因为 Editor 加进来就被强制接收一堆陌生分类。
创建邀请(Owner)
App 端
- 「账本」页面 → 长按要分享的账本 → 选「成员管理」(或在弹出的菜单中)
- 进入成员管理页 → 点「邀请新成员」
- 选有效期(1 小时 / 24 小时 / 3 天 / 7 天)→ 点「生成邀请码」
- 复制 6 位邀请码或调起系统分享(完整文案 + 链接),发给被邀请人
Web 端
- 账本卡片右上角 → 点「成员 / 邀请」图标(人形)
- 弹窗里输入有效期 → 点「生成邀请码」
- 复制邀请码 或 点分享按钮(走系统 share sheet / 自动复制完整文案)
单账本最多同时存活 10 个未失效邀请码,默认 24 小时失效。Owner 可随时在邀请列表里撤销。
加入邀请(Editor)
App 端
- 「我的」 → 「加入共享账本」
- 输入 6 位邀请码 → 「预览」(看一眼是哪个账本 / 谁邀请的)→「加入」
- 加入成功后:本地立刻拉一份 Owner 的资源快照(分类 / 账户 / 标签)+ 历史 tx,picker 用 Owner 的资源,自己原来的账本不变
Web 端
- 账本页面顶部 → 「加入共享账本」按钮
- 输入邀请码 → 预览 → 确认加入
多人协作的核心体验
实时同步
任何一个成员在 App 或 Web 上的改动 — 新建 tx、编辑、删除、改账本名 — server 通过 WebSocket fan-out 给所有其他成员,秒级到达(约 2 秒)。
谁记的 / 谁编辑的
每条 tx 自动标 created_by + last_edited_by:
- 创建人 == 编辑人 != 自己:展示一个头像,长按显示「X 创建并编辑」
- 创建人 != 编辑人:展示两个头像,长按分别显示「X 创建」/「Y 最后编辑」
- 自己创建 + 自己编辑:不展示(看自己头像无意义)
入口:
- App:打开 tx 编辑页,头像在金额数字左侧
- Web:tx 详情弹窗的字段列表里(Created by / Last edited by)
成员收支统计
可按月 / 年 / 全部三个周期看每个成员的收入、支出、笔数。
- App:账本卡片长按 → 「成员收支」→ 简版列表(头像 + 收支金额 + 占比 + 笔数)
- Web:账本卡片图标 → 弹窗(KPI 卡片 + 柱图收支对比 + 饼图支出占比 + 详细列表)
离线场景
- 离线被踢:Editor 重新上线时,server 没在线时事件丢了;App / Web 会在 WS 重连后对账并自动清理本地数据
- 离线时 Owner 改资源:Editor 上线后 App 自动重新拉
/shared-resources,SharedLedger 镜像表更新到最新;Web 端走 WebSocket 跟拉取双保险
退出 / 踢人
- Editor 退出:成员管理页 → 「退出账本」→ 本地数据清理,server 也删 LedgerMember 行
- Owner 踢 Editor:成员管理页 → Editor 行的删除图标 → 确认踢人;被踢方所有设备 WS 收到通知自动清本地
Owner 不能直接退出共享账本(否则没人管这本账)。需要先 transfer ownership(Phase 3 会补上),目前 MVP 没实现转让。临时方案:Owner 留着不退,或删整个账本。
已知限制(MVP)
- 最多 5 成员/账本(Phase 1 上限,后期会放宽)
- Editor 不能新建分类 / 账户 / 标签:只能用 Owner 的全局资源镜像(避免污染)
- 不能转让 Owner:Phase 3 才会实现
- 没有 Viewer 只读角色:Phase 3 会加
- 没有"软冲突"提示:同一条 tx 两人前后编辑会按时间 last-write-wins 决胜,目前不弹「刚被 X 改过」提示(Phase 3 补)
- 没有按成员筛选 tx:洞察 / 列表暂时按全员合并展示
隐私边界
- Editor 只看到自己加入的那本共享账本,看不到 Owner 的其它账本
- Editor 只能选 Owner 的全局资源(分类 / 账户 / 标签):Editor 自己的全局资源不会泄露给 Owner 或其他成员
- 邀请码默认 24 小时失效 + Owner 一键撤销 + 6 位 30^6 字符空间防爆破
相关文档
- BeeCount Cloud 部署 — 共享账本依赖的同步后端
- 常见问题 — Q: 可以多人共享账本吗?