Quellcode durchsuchen

[Fix R4-M3] /me 路径校正为 /ventAI/api/model/me(浏览器实测 + 部署 OpenAPI 核对)

实测(dev :3100 + 部署后端 182.92.126.35:8070):
- dev 代理剥掉 /ventAI 前缀,审计重放写的 /api/me 在部署上不存在(404);
  部署 OpenAPI 里实际是 /api/model/me(返回 {username,is_admin,admin_configured}),带令牌 200。
- 未配置白名单时返回 is_admin:false + admin_configured:false,管理端点 403 admin_not_configured
  (提示 TFAGENTS_ADMIN_USERNAMES 为空,需运维在 TfAgents .env 配置后重启)。
  故前端隐藏入口与后端"对所有人拒绝"一致;配置白名单后管理员入口即可显示。

文档 §⑩ 记录校正依据与实测结论;M1/M2 因环境无设备数据未能 UI 实测(已在文档注明)。
wangkeyi vor 2 Wochen
Ursprung
Commit
ce8a86cd08
2 geänderte Dateien mit 36 neuen und 3 gelöschten Zeilen
  1. 25 0
      docs/ai-changes/20260929-audit-r4.md
  2. 11 3
      src/views/ventAI/manageAssistent/api/user.ts

+ 25 - 0
docs/ai-changes/20260929-audit-r4.md

@@ -192,3 +192,28 @@ less.render(index.less, modifyVars 打桩)  # 输出无 modal-close-x、保留 f
   R4-4 在编译后 CSS 中 `.zxm-modal-close-x{…width:96px…}` **仅剩 1 处**(`antCss.less` 一份,组件层重复已消失)。
 - **未做(如实)**:浏览器实测与连后端联调(无 TfAgents 环境);M1 令牌头到达后端、M2 真实 429/413/404
   文案、M3 管理员/非管理员入口显隐仍待浏览器验收。
+
+## ⑩ M3 接口路径校正与浏览器实测(2026-09-30)
+
+在 dev(`:3100`)+ 部署后端上做了浏览器实测,发现 **M3 的 me 路径与部署不一致,已修正**:
+
+- **原**:`api/user.ts` 用 `/ventAI/api/me`(审计文档 §④ 当时写的契约是 "GET /api/me")。
+- **实测**:dev 代理会剥掉 `/ventAI` 前缀,实际请求 `/api/me` —— 部署后端返回 **404**;
+  该后端 OpenAPI 中实际提供的是 **`/api/model/me`**(描述与 `MeInfo` 契约一致:
+  `{"username": str, "is_admin": bool, "admin_configured": bool}`),带令牌请求 **200**。
+- **修正**:`me = '/ventAI/api/model/me'`,`getMe()` 注释同步更新(补 admin_configured 语义)。
+
+**实测结果(当前部署)**:
+
+- `/api/model/me` → `{"username":"admin","is_admin":false,"admin_configured":false}`(管理员账号也是 false);
+- 管理端点 `POST /api/subagents/{name}/toggle` → **403 `admin_not_configured`**:
+  "管理员未配置(TFAGENTS_ADMIN_USERNAMES 为空),全局变更端点对所有人拒绝;请运维在 .env 配置
+  TFAGENTS_ADMIN_USERNAMES 后重启"。
+
+即:**当前部署下前端隐藏入口与后端"对所有人拒绝"是一致的**,不是前端过严;要让管理员看到
+「技能 / 子智能体 / 思考级别」入口,需 TfAgents 侧配置 `TFAGENTS_ADMIN_USERNAMES` 并重启。
+
+**其余实测(隐藏分支)**:左侧仅「新建任务 / 定时任务」、输入区无思考级别控件、打开弹框无红色报错
+(`errorMessageMode:'none'` 生效);对话 SSE 流式、链接胶囊(R4-2)、导航条点击跳转与滚动跟随(R4-5)、
+关闭弹框(R4-4/R4-8)均已在浏览器中跑通。M1/M2 的点选解读因该环境主风机页无设备数据、无行可点,
+UI 触发未能实测(运行模块经 dev server 取源码确认已含 M1/M2 改动)。

+ 11 - 3
src/views/ventAI/manageAssistent/api/user.ts

@@ -2,7 +2,9 @@
 import { defHttp } from '/@/utils/http/axios/index';
 
 enum Api {
-  me = '/ventAI/api/me',
+  // 实测核对(2026-09-30):TfAgents 部署上该接口挂在 /api/model/me(dev 代理会剥掉 /ventAI 前缀),
+  // 审计 M3 重放时写的 /api/me 在部署上不存在(404)。以部署的 OpenAPI 为准。
+  me = '/ventAI/api/model/me',
 }
 
 export interface MeInfo {
@@ -12,9 +14,15 @@ export interface MeInfo {
 }
 
 /**
- * 查询当前登录用户权限(TfAgents GET /api/me)。
+ * 查询当前登录用户权限(TfAgents GET /api/model/me)。
  * 令牌由 axios 请求拦截器统一带上,这里不手写请求头。
- * errorMessageMode: 'none':接口未上线时返回 404,用默认模式会让每次打开 AI 弹框都弹一个红错;
+ * errorMessageMode: 'none':接口不可用(404/网络失败)时用默认模式会让每次打开 AI 弹框都弹一个红错;
  * 这里静默失败,由调用方按「非管理员」保守降级(且失败不缓存,每次打开重新拉取,管理员名单可能变更)。
+ *
+ * 字段语义(以后端实际返回为准,2026-09-30 实测):
+ *   { "username": "admin", "is_admin": false, "admin_configured": false }
+ *   - is_admin 由 TfAgents 侧管理员白名单判定;
+ *   - admin_configured=false 表示服务端白名单未配置,此时任何账号的 is_admin 都是 false
+ *     (入口会保持隐藏;前端是否据此提示「管理员未配置」属产品决策,当前不提示)。
  */
 export const getMe = () => defHttp.get<MeInfo>({ url: Api.me }, { isTransformResponse: false, errorMessageMode: 'none' });