Skip to content

[finding] sys_inbox_message/sys_notification/sys_email 等平台表从不写 organization_id(存量与新增行 100% null)——请确认多组织语义是否设计如此 #11303

Description

@baozhoutao

一句话(人话摘要)

应用项目实测发现:sys_inbox_message / sys_notification(及回执、投递)/ sys_email 等平台表从不写 organization_id——存量与当天新增行 100% 为 null。请平台确认这是设计如此(这些对象按用户域而非组织域)还是缺口;若是设计如此,多组织隔离语义如何界定。项目侧按约定不动这些表的数据,只报备等口径。

环境

  • 平台:@objectstack/*@17.0.0(GA,锁版);数据库 PostgreSQL 16(容器部署)
  • 项目:os-project-titanwind-ehr 试运行实例;sys_organization 现有 1 个组织

实测观察(2026-08-23,只读 SQL 盘点)

总行数organization_id 为 null
sys_inbox_message383383(100%)
sys_notification_receipt383383(100%)
sys_notification205205(100%)
sys_notification_delivery205205(100%)
sys_email9696(100%)
sys_audit_log44851510(34%)
sys_activity3469916(26%)

关键佐证:

  1. 新增行同样不带:sys_inbox_message 按日分布,2026-08-23 当天新增 3 行全部 null——不是存量残留,是持续行为;
  2. 对照组:同库 sys_approval_request(32 行)/ sys_approval_approver(1 行)organization_id均有值、0 null——审批对象有组织戳而消息/邮件对象恒无,疑似口径不一;
  3. 业务对象侧(应用命名空间各表)在组织上下文修复后新增行均正确带组织,17.1.0 起无组织写会被拒——sys_* 似豁免于该约束。

想请平台回答的问题

  1. 上述消息/邮件/日志类平台对象不写组织是否设计如此(按 user 域路由,不参与组织隔离)?
  2. 若是设计:多组织实例下,站内信/通知中心的可见性边界以什么为准?sys_audit_log/sys_activity 的部分行有组织、部分为 null(34%/26%),这种混合态是预期吗(参考:audit: a user's FIRST session predates their membership, so every audit row written in that window carries a NULL tenant and is invisible to RLS readers #8245 处理过首会话窗口的 NULL tenant audit 行)?
  3. 若属缺口:应用项目是否应回填?我们默认不碰平台表数据,等平台给口径或修复。

由来

应用项目升级门禁盘点(项目侧 issue steedos-labs/os-project-titanwind-ehr#1750)中顺带发现;业务表的存量 null 组织行(853 行)已在项目侧按批复回填完毕,与本单无关,本单只涉及 sys_* 平台表。

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions