Files
BoosAPI/TEST_ENVIRONMENT_SETUP.md
Delicious233 fa25a501a8 feat: 实现全局模型白名单功能 (#301)
* feat: 实现全局模型白名单功能

## 功能概述
实现全局模型白名单,允许管理员配置只启用特定模型的路由,实现精细化的模型访问控制。

## 主要变更

### 后端实现
- config.ts: 新增 globalAllowedModels 配置项
- settings.ts:
  - 新增 RuntimeSettingsBody 类型支持
  - 实现数据库加载和持久化
  - 配置变更自动触发路由重建
- modelService.ts:
  - 在路由重建中添加白名单过滤逻辑
  - 大小写不敏感匹配,自动trim空格
  - 空白名单时允许所有模型(向后兼容)
- stats.ts:
  - 候选API过滤 models/modelsWithoutToken/modelsMissingTokenGroups

### 前端实现
- Settings.tsx:
  - 新增"全局模型白名单"配置卡片
  - 支持手动输入和点击选择两种添加方式
  - 绿色徽章显示已选模型,支持删除
  - 保存后自动触发路由重建

## 技术特性
-  向后兼容(默认为空数组,允许所有模型)
-  大小写不敏感匹配
-  自动trim和去重
-  输入验证(类型检查、空值过滤)
-  配置变更自动重建路由

## 测试验证
- 白名单为空时所有模型可见
- 白名单有值时只显示白名单模型
- 路由重建正确过滤模型
- 候选API正确返回过滤结果
- 前端UI交互正常

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: add getModelTokenCandidates mock to Settings tests

* fix: add getModelTokenCandidates mock to proxy-transport test

---------

Co-authored-by: Ding <ding@local>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 17:19:02 +08:00

4.1 KiB
Raw Permalink Blame History

本地测试环境搭建指南

目录结构

D:\Code\Projects\Metapi\
├── metapi                          # 主仓库(upstream
├── metapi-routing-ux-optimization  # 开发 worktree (模型白名单功能)
├── metapi-upstream-latest          # 其他 worktree
└── ...

快速启动测试服务器

1. 进入开发 worktree

cd D:/Code/Projects/Metapi/metapi-routing-ux-optimization

2. 安装依赖(首次运行)

pnpm install

3. 构建项目

pnpm build

4. 启动测试服务器

DATA_DIR="./tmp/test-db" node dist/server/index.js

服务器将在 http://localhost:4000 启动

测试Token: test-admin-token

5. 访问前端

打开浏览器访问: http://localhost:4000

登录使用 Token: test-admin-token

测试数据准备

方式1: 导入真实站点

在前端"站点管理"中添加真实的 new-api 站点:

  • 站点URL: 真实的 new-api 地址
  • 平台: new-api
  • 添加账号和token

然后触发模型发现:

curl -X POST -H "Authorization: Bearer test-admin-token" \
  -H "Content-Type: application/json" \
  -d '{"refreshModels": true, "wait": true}' \
  http://localhost:4000/api/routes/rebuild

方式2: 使用测试脚本(可选)

DATA_DIR="./tmp/test-db" node scripts/seed-test-data.js

测试模型白名单功能

1. 进入设置页面

点击左侧导航"设置",滚动到"全局模型白名单"卡片

2. 测试功能

添加模型到白名单

  • 方式1: 在输入框输入模型名称,按回车
  • 方式2: 点击"可用模型列表"中的模型

删除模型

  • 点击已选模型徽章上的 × 按钮

保存配置

  • 点击"保存模型白名单"按钮
  • 系统自动触发路由重建

3. 验证效果

查看路由

进入"令牌路由"页面,确认只有白名单中的模型有路由

查看模型候选

curl -H "Authorization: Bearer test-admin-token" \
  http://localhost:4000/api/models/token-candidates | python -m json.tool

应该只返回白名单中的模型

4. API 测试命令

查看当前白名单

curl -H "Authorization: Bearer test-admin-token" \
  http://localhost:4000/api/settings/runtime | python -m json.tool | grep -A 5 "globalAllowedModels"

设置白名单

curl -X PUT \
  -H "Authorization: Bearer test-admin-token" \
  -H "Content-Type: application/json" \
  -d '{"globalAllowedModels": ["gpt-4", "gpt-4o"]}' \
  http://localhost:4000/api/settings/runtime | python -m json.tool

清空白名单(允许所有模型)

curl -X PUT \
  -H "Authorization: Bearer test-admin-token" \
  -H "Content-Type: application/json" \
  -d '{"globalAllowedModels": []}' \
  http://localhost:4000/api/settings/runtime | python -m json.tool

停止测试服务器

查找进程

# Windows
netstat -ano | grep ":4000" | grep "LISTENING"

# Linux/Mac
lsof -i :4000

停止进程

# Windows (替换 PID)
taskkill //F //PID <PID>

# Linux/Mac
kill <PID>

开发工作流

修改代码后重新构建

pnpm build

运行测试

pnpm test

提交代码

git add .
git commit -m "feat: 实现模型白名单功能"
git push origin routing-ux-optimization

常见问题

Q: 路由列表为空?

A: 检查 token_model_availability 表是否有数据,触发模型发现重新加载

Q: 白名单保存后路由消失?

A: 正常现象,白名单会过滤掉不在列表中的模型路由

Q: 如何恢复所有模型?

A: 清空白名单(设置为空数组 [])即可

数据库位置

测试数据库存储在: ./tmp/test-db/hub.db

查看数据库:

sqlite3 ./tmp/test-db/hub.db

常用查询:

-- 查看所有站点
SELECT id, name, url, platform FROM sites WHERE status = 'active';

-- 查看所有账号
SELECT id, site_id, username, status FROM accounts;

-- 查看所有token
SELECT id, account_id, name, value_status FROM account_tokens;

-- 查看模型可用性
SELECT COUNT(*) FROM token_model_availability;

-- 查看路由
SELECT COUNT(*) FROM token_routes;