父 Story:#7(M1 入口级交付 · webui)。WP4a。Blocked by #9(导航骨架)。红线:示例数据脱敏占位。
⚠ 前序修正(对齐 canonical · 见 #9)
canonical(主仓 prototype/components/sidebar.tsx)中**「组织管理」是独立 L1**(id: org-admin,租户自治),不折叠进「管理中心」。本 issue 据此修正:
- 本刀 = 组织管理(独立 L1) 的成员/角色/用户组页 + 角色门控,不挂在管理中心下。
- 「管理中心」是另一个模块(canonical L1:数据源管理 + 基础配置〔标签/逻辑类型映射/告警〕),与组织管理无关,本拆分未覆盖其页面 → 覆盖缺口,待 taxonomy 冻结后另立页面刀(归 WP3 同形)。
目标
「组织管理」L1 下成员 / 角色 / 用户组三区段,按 Keycloak 角色门控。属使用平面租户自管理(D:「租户自管理 ≠ admin」),非跨租户运营。
范围(文件清单)
apps/console/src/modules/org/{members,roles,groups}/<M>Page.tsx + .stories.tsx(ProTable)。路由 /settings/{users,roles,user-groups}(对齐 canonical href)。
- 路由/菜单门控:
usePermission / RequireRole(JWT X-Roles,@hashmatrix/sdk 已就绪)。
apps/console/src/mocks/*:成员/角色/用户组 msw 数据(脱敏占位)。
apps/console/src/i18n/locales/*:叶子串(typed)。
起点(精确路径 · 真/stub/缺失)
- 门控原语
ROLES/usePermission/RequireRole 已就绪。
- 页面模板:镜像
apps/admin/src/modules/* 的 page+story+ProTable 模式(canonical 引用的 prototype/app/settings/* 在 webui 仓外,从 admin 模式建)。
预估 LOC
~280
测试 / DoD
- 角色门控 story(有/无角色两态);无权限时菜单隐藏 + 路由守卫兜底。
- lint / vitest / storybook-playwright / build 绿。
依赖
验收
⚠ 前序修正(对齐 canonical · 见 #9)
canonical(主仓
prototype/components/sidebar.tsx)中**「组织管理」是独立 L1**(id: org-admin,租户自治),不折叠进「管理中心」。本 issue 据此修正:目标
「组织管理」L1 下成员 / 角色 / 用户组三区段,按 Keycloak 角色门控。属使用平面租户自管理(D:「租户自管理 ≠ admin」),非跨租户运营。
范围(文件清单)
apps/console/src/modules/org/{members,roles,groups}/<M>Page.tsx+.stories.tsx(ProTable)。路由/settings/{users,roles,user-groups}(对齐 canonical href)。usePermission/RequireRole(JWTX-Roles,@hashmatrix/sdk已就绪)。apps/console/src/mocks/*:成员/角色/用户组 msw 数据(脱敏占位)。apps/console/src/i18n/locales/*:叶子串(typed)。起点(精确路径 · 真/stub/缺失)
ROLES/usePermission/RequireRole已就绪。apps/admin/src/modules/*的 page+story+ProTable 模式(canonical 引用的prototype/app/settings/*在 webui 仓外,从 admin 模式建)。预估 LOC
~280
测试 / DoD
依赖
验收
apps/console,不混跨租户运营。