feat(weibo): 拆分账号管理与个人工作台

This commit is contained in:
yml2213
2026-11-08 16:26:53 +08:00
parent 5d6325d74c
commit d566518478
13 changed files with 1307 additions and 93 deletions
@@ -0,0 +1,97 @@
---
type: 设计
description: 微博外部 CK 账号池与客服个人工作台的拆分设计,覆盖数据归属、权限、接口和 UI。
tags: [微博, CK, 账号池, 工作台, 权限, 协作]
generated:
by: ai/codex
at: 2026-11-08T16:20:00+08:00
status: implemented
---
# 微博账号池与个人工作台
## 1. 目标
把原来的「账号与绑定」拆成两个入口:
- **账号管理**:全局微博账号池,负责 CK 导入、生命周期、标签、批量操作和资料维护。
- **微博工作台**:每个用户自己的账号子集,只展示自己导入的账号,用于绑定、充值、兑换和日常操作。
工作台采用斗鱼模式:**账号实体仍然全局唯一,工作台只保存用户与账号的映射**。同一个账号可以被多人分别加入自己的工作台,工作台增删互不影响;底层 CK 刷新后,所有引用该账号的工作台看到同一份最新资料。
## 2. 数据模型
`weibo_accounts` 继续作为全局账号池,不允许因为工作台拆出第二份 CK。
新增:
```text
weibo_workbench_accounts
id
user_id -> users.id
account_id -> weibo_accounts.id
created_at
UNIQUE(user_id, account_id)
```
删除账号或用户时,对应工作台映射级联删除,不保留孤儿记录。
## 3. 权限
- `weibo:view`:查看全局账号管理。
- `weibo:workbench`:访问个人微博工作台。
- `weibo:import`:导入外部 CK。
- `weibo:manage`:编辑账号标签/备注、启停账号、批量标签。
- `weibo:account:ck_export`:复制账号 CK。
- `weibo:bind`:生成绑定二维码。
- `weibo:recharge`:创建充值订单。
- `weibo:exchange`:执行兑换。
客服和运营默认拥有个人工作台及日常操作权限;删除账号仍由 `weibo:delete` 控制,客服默认没有。
## 4. 接口
| 方法 | 路径 | 权限 | 说明 |
| --- | --- | --- | --- |
| GET | `/api/weibo/accounts` | `weibo:view` | 全局账号池分页列表 |
| GET | `/api/weibo/workbench/accounts` | `weibo:workbench` | 当前用户工作台账号分页列表 |
| GET | `/api/weibo/workbench/pool` | `weibo:workbench` | 可加入当前工作台且尚未加入的账号 |
| POST | `/api/weibo/workbench/accounts` | `weibo:workbench` | 批量加入工作台,幂等 |
| POST | `/api/weibo/workbench/accounts/remove` | `weibo:workbench` | 批量移出工作台,不影响账号池和其他用户 |
| POST | `/api/weibo/accounts/batch-tag` | `weibo:manage` | 账号管理页批量设置标签 |
工作台接口始终按 `current.id` 过滤,不接受客户端传入用户 ID。
## 5. UI
菜单:
```text
微博
-> 账号管理
-> 微博工作台
-> 外部单协作
```
账号管理页:
- 标题「微博账号管理」。
- 保留全量账号列表、生命周期、批量刷新、批量标签、启停和删除。
- 用于维护账号池,不作为客服的日常入口。
工作台页:
- 标题「微博工作台」。
- 复用账号能力,但列表只显示当前用户工作台映射。
- 「导入账号」从账号池选择账号加入。
- 「导入外部 CK」会先写入全局账号池,再自动加入当前工作台。
- 支持单个/批量移出工作台,不删除账号池数据。
- 绑定二维码、充值、兑换、功能查询继续复用现有账号接口。
## 6. 数据隔离边界
- 工作台列表、账号池候选和增删接口都按当前登录用户过滤。
- 加入/移出只操作 `weibo_workbench_accounts`,不修改账号归属或 CK。
- 账号池仍由全局权限控制;客服可以看到账号管理入口,但不能删除账号。
- 外部单协作继续引用全局账号 ID,不受个人工作台选择影响。