Skip to content

console: System Hub 的 Organizations / Permissions 卡片计数永远显示 0 —— 查的是框架里不存在的对象 sys_org / sys_permission #3670

Description

@yinlianghui

越界发现,记录于 #3655(补齐 System Hub 五个入口的路由)期间,为确定重定向目标而逐个核对框架真实对象名时。按纪律只报不改,单独立单,未认领,留给 PM 分诊。

基线:origin/main @ dae1ac41e;框架侧 ../objectstack 同期 checkout。

事实

apps/console/src/pages/system/SystemHubPage.tsx:76-82 为五张卡片各拉一次全量列表当计数:

dataSource.find('sys_user').catch(() => ({ data: [] })),
dataSource.find('sys_org').catch(() => ({ data: [] })),
dataSource.find('sys_position').catch(() => ({ data: [] })),
dataSource.find('sys_permission').catch(() => ({ data: [] })),
dataSource.find('sys_audit_log').catch(() => ({ data: [] })),

其中 sys_orgsys_permission 在框架里不存在:

  • 组织对象叫 sys_organization(packages/platform-objects/src/identity/sys-organization.object.ts:14,Setup 导航 nav_organizations / nav_organization 也用这个名字)。全仓 grep 'sys_org' 作为对象名:零命中
  • 权限侧框架拆成两个对象:sys_capability(packages/plugins/plugin-security/src/objects/sys-capability.object.ts:27)与 sys_permission_set(同目录 :16)。前者的 docblock 明写「Named sys_capability (not sys_permission as the ADR loosely floats)」。全仓 grep 'sys_permission'(精确、不含 _set):零命中

每个 find 都挂了 .catch(() => ({ data: [] })),所以 404 被静默吞掉,counts.orgs / counts.permissions 落成 0。屏幕上的结果不是错误提示,而是两个看上去正常的 0 —— 与「确实一条都没有」无法区分。

sys_user / sys_position / sys_audit_log 三个名字是对的,所以同一张卡片墙上三个数真、两个假。

影响面

System Hub(/apps/setup/system)是 SystemHubPage.tsx:132 注释所称「System admin cards (non-metadata, always present)」的那一屏,有应用时也照常可达。管理员看到 Organizations = 0 会合理推断「还没建组织」,而单组织部署里 sys_organization 至少有一行。

与在途工作的关系

可能的修法方向(留给分诊,不预判)

  1. 直接改名:sys_org -> sys_organization;sys_permission -> 由上面那个歧义的裁决决定。
  2. 顺带质疑这套计数本身:每张卡片拉一次全量列表只为取 data.length,代码里已有 // TODO: Replace with count-specific API endpoint when available
  3. 更彻底的一条:SystemHubPage 自己的 docblock 标了 @deprecated(「superseded by the metadata-driven left-side menu … New admin surfaces must be added as nav items, NOT as bespoke cards/pages here」)。如果这一屏本就该退场,修计数只是延寿。

属于「先定权限语义、再定这一屏去留」的取舍,需要维护者定方向。

已就关键词(sys_orgsys_permissionSystemHubPagefetchCounts、counts)搜过本仓开放 issue 与 PR,无同源单。


Generated by Claude Code

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions