资源附件+共享:端上「附件与共享暂未开放」 #25

Closed
opened 2026-10-28 12:52:45 +00:00 by laoyang · 1 comment
Owner

现象

资源模块端上明说「附件与共享还在网页端『资源』里管 —— App 这边暂未开放」(FbResourceSheet.ets)。

现状与依据

  • 服务端 resources API 现有:GET/POST /api/v1/resources、GET/PATCH/DELETE /api/v1/resources/<id>。
    缺:附件上传/删除、共享给谁(Web 端有 resources/attach_add、resources/attach_del、resources/share、resources/unshare 表单路由)。
  • 端上 FbResourceSheet 的「附件/共享」处只放说明文案,不摆入口。

要做的(双端)

服务端:

  1. resources API 补子端点:POST/DELETE /api/v1/resources/<id>/attach(multipart,参考 tasks/<id>/attach 已有实现);GET/POST/DELETE /api/v1/resources/<id>/shares(参考 ledger/<id>/shares / Task::setShare)。

端上:
2. FbResourceSheet 把「附件」「共享给谁」两个入口补上(复用既有附件上传 + 选人组件)。

验收

  • 端上能往一条资源传附件、删附件,Web 端能看到。
  • 端上能把资源共享给某成员,共享列表两端一致。

标签

terminal/web + terminal/harmony · 双端


本单由需求拆解生成,主单 laoyang/FamilyBook #22。

## 现象 资源模块端上明说「附件与共享还在网页端『资源』里管 —— App 这边暂未开放」(`FbResourceSheet.ets`)。 ## 现状与依据 - 服务端 `resources` API 现有:`GET/POST /api/v1/resources`、`GET/PATCH/DELETE /api/v1/resources/<id>`。 缺:**附件上传/删除**、**共享给谁**(Web 端有 `resources/attach_add`、`resources/attach_del`、`resources/share`、`resources/unshare` 表单路由)。 - 端上 `FbResourceSheet` 的「附件/共享」处只放说明文案,不摆入口。 ## 要做的(双端) 服务端: 1. `resources` API 补子端点:`POST/DELETE /api/v1/resources/<id>/attach`(multipart,参考 `tasks/<id>/attach` 已有实现);`GET/POST/DELETE /api/v1/resources/<id>/shares`(参考 `ledger/<id>/shares` / `Task::setShare`)。 端上: 2. `FbResourceSheet` 把「附件」「共享给谁」两个入口补上(复用既有附件上传 + 选人组件)。 ## 验收 - 端上能往一条资源传附件、删附件,Web 端能看到。 - 端上能把资源共享给某成员,共享列表两端一致。 ## 标签 terminal/web + terminal/harmony · 双端 --- > 本单由需求拆解生成,主单 laoyang/FamilyBook #22。
Author
Owner

收尾:已修完、已验证、已部署

两端都已提交、推送,服务端已部署上线。

改了什么

服务端(commit 47247e3):

  • GET/POST/DELETE /api/v1/resources/<id>/attach —— 附件列表 / 传 / 删(删走 attachment_id query,与任务附件同招)。
  • GET/POST/DELETE /api/v1/resources/<id>/shares —— 共享列表 / 加 / 取消(person_id query)。

鸿蒙端(commit f93dd92,2 文件):

  • FbResourceRepo 补 attach/share 写操作。
  • FbResourceSheet 把原来「附件与共享还在网页端」的说明,换成两个真功能区块:
    • 附件:列表(图片缩略图 / 文件图标)+「+传附件」+ 逐条删;
    • 共享:列表(只看/可改)+「共享给…」(复用名册选人组件)+ 逐条取消。
    • 只读共享进来的不摆这些入口(与 canWrite 对齐)。

一个值得注意的安全点

越权访问(拿别人名下的资源去共享/传附件)服务端返回的是 404 而不是 403 ——
Resource::find 对「看不到的资源」直接返 null,连"这条资源存在"都不泄露给越权者。
判据没写死具体码,只断言「非 2xx + 库里确实没被动手脚」。

验证

  • 服务端冒烟 _i25_resource_api.py 21/0:传/列/删附件 · 共享增/列/删 · 越权被拒。
  • 反证 _i25_falsify.py:注掉附件列表、注掉 shares 分支,各自变红。
  • 鸿蒙端编译 BUILD SUCCESSFUL。

部署

服务端 20261028-220022,两仓库已 push。

⚠️ 真机点验待设备恢复:附件传上来能看缩略图、共享选人后列表即时刷新,这些手感要设备连上再点。

## 收尾:已修完、已验证、已部署 两端都已提交、推送,服务端已部署上线。 ### 改了什么 **服务端**(commit `47247e3`): - `GET/POST/DELETE /api/v1/resources/<id>/attach` —— 附件列表 / 传 / 删(删走 `attachment_id` query,与任务附件同招)。 - `GET/POST/DELETE /api/v1/resources/<id>/shares` —— 共享列表 / 加 / 取消(`person_id` query)。 **鸿蒙端**(commit `f93dd92`,2 文件): - `FbResourceRepo` 补 attach/share 写操作。 - `FbResourceSheet` 把原来「附件与共享还在网页端」的说明,换成两个真功能区块: - 附件:列表(图片缩略图 / 文件图标)+「+传附件」+ 逐条删; - 共享:列表(只看/可改)+「共享给…」(复用名册选人组件)+ 逐条取消。 - 只读共享进来的不摆这些入口(与 `canWrite` 对齐)。 ### 一个值得注意的安全点 越权访问(拿别人名下的资源去共享/传附件)服务端返回的是 **404 而不是 403** —— `Resource::find` 对「看不到的资源」直接返 null,连"这条资源存在"都不泄露给越权者。 判据没写死具体码,只断言「非 2xx + 库里确实没被动手脚」。 ### 验证 - 服务端冒烟 `_i25_resource_api.py` **21/0**:传/列/删附件 · 共享增/列/删 · 越权被拒。 - 反证 `_i25_falsify.py`:注掉附件列表、注掉 shares 分支,各自变红。 - 鸿蒙端编译 **BUILD SUCCESSFUL**。 ### 部署 服务端 `20261028-220022`,两仓库已 push。 ⚠️ 真机点验待设备恢复:附件传上来能看缩略图、共享选人后列表即时刷新,这些手感要设备连上再点。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: laoyang/FamilyBook#25