Skip to content

console: 系统导航 / System Hub 的 users / organizations / roles / positions / permissions 五个入口没有对应路由 —— 两个落 "Page not found",三个跳进不存在对象 system 的记录页 #3655

Description

@yinlianghui

越界发现,记录于 #3638(伪路由开关改按路径段判断)期间枚举 system / metadata 输入面时。按纪律只报不改,单独立单,未认领,留给 PM 分诊。

基线:origin/main @ 54dd7ec1f静态路由表推导,未做浏览器实测 —— 见下「未验证的部分」。

现象

侧栏 sys-* 簇与 System Hub 卡片一共产出 5 个 /apps/setup/system/{名} 目标,宿主一个都没有声明路由:

入口 产出者 目标 URL
Users UnifiedSidebar.tsx:337 / AppSidebar.tsx:331 / SystemHubPage.tsx:138 /apps/setup/system/users
Organizations UnifiedSidebar.tsx:338 / AppSidebar.tsx:332 / SystemHubPage.tsx:146 /apps/setup/system/organizations
Roles UnifiedSidebar.tsx:339 / AppSidebar.tsx:333 /apps/setup/system/roles
Positions SystemHubPage.tsx:154 /apps/setup/system/positions
Permissions SystemHubPage.tsx:162 /apps/setup/system/permissions

宿主 apps/console/src/AppContent.tsx:86-114systemRoutes 只声明了 systemsystem/appssystem/profilesystem/approvalssystem/ai-approvalssystem/audit-logsystem/settings{,/:namespace}system/objects{,/:objectName}system/metadata{,/:type,/:type/:itemName};packages/app-shell/src/console/AppContent.tsx:781-783 只补了 system/marketplace{,/installed,/:packageId}。上面 5 个名字都不在其中

两种落点(取决于名字长度,这是最刺眼的地方)

未匹配的 URL 掉到 packages/app-shell/src/console/AppContent.tsx:794:objectName/:maybeRecordId,由 ShorthandRecordRedirect 判定第二段像不像记录 id。looksLikeRecordId(:940)要求 segment.length >= 6(:946):

  • users(5)、roles(5) → 不像记录 id → RouteNotFound「Page not found」
  • organizations(13)、positions(9)、permissions(11) → 记录 id → 重写成 /apps/setup/system/record/{名},命中 :objectName/record/:recordId(:763)→ RecordDetailView 去加载对象名为 system 的一条记录 —— system 不是任何对象。

也就是说,同一簇导航里点 Users 得到 404、点 Organizations 得到一个「不存在对象的记录详情」,差别只来自单词长度。前者尚可辨认,后者会被读成后端/数据问题。

影响面

sys-* 簇是 AppSidebar / UnifiedSidebar无条件呈现的系统导航(与已修好的 sys-settings #3590sys-datasources / sys-objects #3610 同一簇),System Hub 的四张卡片也是「System admin cards (non-metadata, always present)」(SystemHubPage.tsx:132 原注释)。不是零应用专属,有应用时同样点得到。

#3638 / #3610 / #3590 的关系(为什么单独立单)

未验证的部分(交分诊时请连这条一起读)

结论来自路由表 + looksLikeRecordId 的静态推导,没有跑浏览器。两处需要实测确认:

  1. 是否有别的宿主(cloud / framework 内嵌 console)通过自己的 extraRoutes 声明了这 5 条 —— 若有,则问题收敛为「参考宿主 apps/console 缺声明」。
  2. RecordDetailView 拿到不存在的对象 system 时的实际屏幕(空态?报错?白屏?),决定后三条的严重度。

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

要么在宿主补 5 条路由指向对应的系统对象页(与 system/objects/:objectName 的重写风格一致),要么把这 5 个导航项改指已存在的目标(如 sys_user 等对象的 component/metadata/resource / 对象页),要么按 #3590 的做法逐个重定目标。属于导航契约层面的取舍,需要维护者定方向。

已就关键词(system/userssystem/organizationssys-usersSystemHubPageShorthandRecordRedirectlooksLikeRecordId)搜过本仓开放 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