You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
和 #4779 记的那一条同源:今天危害有限,因为记录已经不存在,buildReadFilter 拼出来的 record_id IN (...) 匹配不到任何真实行。但这个「有限」完全依赖一个假设:记录 id 永不复用。 那个假设目前没有任何门禁保护 —— 一旦引入 id 复用、app 自定义主键、或者导入时保留原 id,这些孤儿行会立刻变成真实越权:新记录一落到旧 id 上,旧记录的共享对象就直接拿到了新记录的读/写权限。
次要的:sys_record_share 单调增长,而 Setup 的 Record Shares 列表会展示指向不存在记录的行。
Activity
claude commentedon Aug 4, 2026
裁定(维护者授权车道内继续,2026-08-04):方案 A —— plugin-sharing 在所有启用 sharing 的对象上绑 afterDelete,撤销该记录全部
sys_record_share行(不分 source);同批补 boot 期按「记录还在不在」的孤儿清扫。两轴:A 立即恢复不变量(记录没了,任何共享都不可能有效),落点全在本车道(
plugin-sharing),且不排斥 B —— 平台级多态弱引用级联(sys_attachment/sys_comment/sys_approval_request同族)是更普适的机制,值得立项,但它尚不存在,不该让授权面的孤儿行等一个未立项的平台能力。B 已另立设计卡交 engine 车道(见下条评论链接);B 落地之日,A 的钩子可收敛进去。绑定模型说明:「启用 sharing 的对象」由
sharingModel运行期决定,与现在按规则表绑定不同 —— dev 需按对象元数据枚举绑定,并处理元数据热更新(对象后来开 sharing)的情形;做不到热更新则至少 boot 时全量绑定 + 文档写明边界。摘
needs-user-decision,本轮派发。Generated by Claude Code
claude commentedon Aug 4, 2026
认领:PM 循环第 12 轮
会话:
session_015W6nhsDrz6zWQc8je12a1t分支:
claude/issue-5103-sharing-orphan-cascadeWorktree:
objectstack-issue-5103文件面:
packages/plugins/plugin-sharing/**(afterDelete 全源撤销 + boot 孤儿清扫)+ 测试 + changeset;域domain:identityGenerated by Claude Code
fix(sharing): the deferred-sweep breadcrumb is info, not warn (#5103)
docs(sharing): record why referential cascades are already covered (#…
claude commentedon Aug 4, 2026
PM 验收(第 12 轮,identity 车道):ACCEPT — PR #5196,CI 绿后转 ready 入队
sharingModel判定 —— 没有绑定表就没有陈旧问题,运行期开 sharing 的对象下一次删除即被覆盖。第三类回归(退回按规则表 boot 绑定)被h.options.object === undefined断言 + 热更新测试结构性杀死if (!id) return让sys_record_share授权在批量更新后变陈旧 #4779 的 stash 挪到 resolver 旁消重,顺手但正确 ✓;spec/objectql 零触碰 ✓衍生 #5190 已核并入队(identity 车道):
sys_share_link同族且更糟 —— resolve 查 token/revoked/expires 却不查记录还在不在,而 share link 是无身份的能力令牌,id 复用时持有者即赢家;修法已点名(resolve 加存在性检查 + 复用本 PR 的 cascade seam)。同包串行:#5196 合入后作为下一单派发。Generated by Claude Code
fix(sharing): 记录删除时撤销该记录的全部 `sys_record_share`(不分 source)+ boot 期按记录存…
fix(plugin-sharing): 记录删除后 sys_share_link 令牌立即失效 —— resolve 存在性校验 + 删…
fix(plugin-sharing, plugin-audit): runtime strings state each decisio…