UserManagementPage.tsx 的编辑用户 dialog 当前缺失 role_code 选择器 — form.role_code 在 state 里初始化为 editing.role_code 并随 PATCH 提交,但 UI 没暴露,管理员无法从界面修改用户角色。
UserManagementPage.tsx
form.role_code
editing.role_code
仅修改 frontend/app/features/admin/UserManagementPage.tsx 一个文件。
frontend/app/features/admin/UserManagementPage.tsx
{editing && (...)}
<label>
<select>
admin
developer
role_name
editing.user_id === user?.user_id
targetIsAdmin && form.role_code !== editing.role_code
_count_active_system_admins
editingSelf && form.role_code !== editing.role_code
pnpm typecheck
role_code
Task: qwp3v51sokmuyp7evoeu9n3d
tao.chen commented:
已实施。
改动:
ApiRequestError.message
验证:
pnpm build
formFieldClass
formInputClass
No dependencies set.
The note is not visible to the blocked user.
背景
UserManagementPage.tsx的编辑用户 dialog 当前缺失 role_code 选择器 —form.role_code在 state 里初始化为editing.role_code并随 PATCH 提交,但 UI 没暴露,管理员无法从界面修改用户角色。范围 (L1 风险)
仅修改
frontend/app/features/admin/UserManagementPage.tsx一个文件。修改
{editing && (...)}块)的状态<label>之前插入角色<select>字段admin/developer(role_name通过现有 store 或留作后端返回;沿用 status 的简化格式)editing.user_id === user?.user_id时禁用(自降级由后端 409 拦截)targetIsAdmin && form.role_code !== editing.role_code守卫(由后端_count_active_system_admins+ workspace-level last-admin 兜底)editingSelf && form.role_code !== editing.role_code守卫(双重保护)验收
pnpm typecheck通过不做
role_code字段)Task: qwp3v51sokmuyp7evoeu9n3d
tao.chen commented:
改动:
frontend/app/features/admin/UserManagementPage.tsx在编辑 dialog 中(role 在 email 之后、status 之前)新增角色<select>,选项 admin/developer。editing.user_id === user?.user_id)。_count_active_system_admins+ workspace-level last-admin guard 兜底;backend 409 通过ApiRequestError.message直接显示。editingSelf && form.role_code !== editing.role_code作为 defense-in-depth(且 select 禁用使其无法触发)。UserManagementPage.tsx一文件改动;create 流程未动(role_code 仍硬编码 "developer")。验证:
pnpm typecheck零错误pnpm build通过(client + SSR)formFieldClass+formInputClass)