Merged
Conversation
- 新增 APP_URL 环境变量,支持自定义 OpenAPI server URL - 动态生成 OpenAPI servers 配置,优先使用环境变量 - 开发环境自动使用 localhost,生产环境提示配置 - 更新 .env.example 和 CLAUDE.md 文档 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude <noreply@anthropic.com>
- 移除 Command 组件的 flex-1 类 - 移除 PopoverContent 的固定高度 h-[500px] - 移除 CommandList 的 flex-1 类 - 让弹出框根据实际内容自适应高度
问题原因: - UserKeyDisplay 类型缺少 canLoginWebUi 字段 - getUsers() 函数未返回该字段给前端 - 导致 EditKeyForm 组件无法获取和保存该配置 修复内容: 1. 在 UserKeyDisplay 接口中添加 canLoginWebUi 字段 2. 在 getUsers() 函数中返回 key.canLoginWebUi 影响范围: - src/types/user.ts: 添加类型定义 - src/actions/users.ts: 返回字段值 测试建议: 1. 打开 Key 管理弹框,修改"允许登录 Web UI"选项 2. 保存后重新打开弹框,确认修改已生效 3. 验证其他选项(限额等)仍然正常工作
| createdAt: Date; // 创建时间 | ||
| createdAtFormatted: string; // 格式化后的具体时间 | ||
| // Web UI 登录权限控制 | ||
| canLoginWebUi: boolean; // 是否允许使用该 Key 登录 Web UI |
Contributor
Author
There was a problem hiding this comment.
✅ 类型定义正确添加
添加 canLoginWebUi 字段到 UserKeyDisplay 接口是修复此问题的关键步骤。这确保了类型系统能够正确追踪这个字段。
建议:可以考虑添加 JSDoc 注释说明默认值,例如:
canLoginWebUi: boolean; // 是否允许使用该 Key 登录 Web UI(默认: true)
| lastProviderName: stats?.lastProviderName ?? null, | ||
| modelStats: stats?.modelStats ?? [], | ||
| // Web UI 登录权限控制 | ||
| canLoginWebUi: key.canLoginWebUi, |
Contributor
Author
There was a problem hiding this comment.
✅ 数据传递修复完成
在返回对象中添加 canLoginWebUi: key.canLoginWebUi 是本次修复的核心。这确保了从数据库读取的值能够正确传递到前端组件。
验证点:
- ✅ 字段名与类型定义一致
- ✅ 直接从数据库实体获取,无需转换
- ✅ 位置合理(紧邻其他 UI 权限控制相关字段)
Contributor
Author
代码审查总结✅ 修复方案评估本次 PR 成功修复了 Issue #58 中报告的"禁止 Key 访问 WebUI"选项无法保存的问题。修复方案简洁、准确,完全符合项目规范。 🎯 核心修复内容1. 类型定义完善 (
|
| 评估项 | 状态 | 说明 |
|---|---|---|
| 问题定位 | ✅ 优秀 | PR 描述详细追踪了问题根因,从类型定义到数据传递链路 |
| 修复准确性 | ✅ 优秀 | 仅修改必要的 2 处代码,避免过度修改 |
| 向后兼容性 | ✅ 优秀 | 纯数据传递修复,不影响现有功能和数据 |
| 代码规范 | ✅ 优秀 | 符合项目 TypeScript 和代码风格规范 |
| 测试建议 | ✅ 优秀 | PR 描述中提供了详细的测试步骤 |
🔍 附加发现
其他文件变更分析
-
.env.example和CLAUDE.md- ✅ 添加了
APP_URL环境变量的文档说明 - ✅ 用于 OpenAPI 文档的 server URL 配置
- ✅ 与主要修复无关,但属于合理的文档完善
- ✅ 添加了
-
README.md- ✅ 添加了 Telegram 交流群链接
- ✅ 改善了项目社区沟通渠道
-
public/seed/litellm-prices.json- ✅ LiteLLM 价格表更新(24138 行新增)
- ✅ 属于常规的价格数据同步
- ✅ 不影响核心功能
-
src/app/api/actions/[...route]/route.ts- ✅ OpenAPI 文档相关优化
- ✅ 与主要修复无关,但属于合理的功能增强
✅ 批准建议
推荐批准并合并,理由如下:
- ✅ 修复准确:完全解决了 Issue 前端“禁止 Key 访问 WebUI” 选项选择后无法保存 #58 的问题
- ✅ 影响可控:仅修改数据传递层,风险极低
- ✅ 质量保证:代码符合规范,无明显缺陷
- ✅ 文档完善:PR 描述详尽,便于后续维护
- ✅ 版本管理:版本号更新合理(0.2.23 → 0.2.25)
📝 测试清单
合并前建议执行以下测试:
- 修改 Key 的"允许登录 Web UI"选项为关闭,保存后重新打开确认状态保持
- 修改 Key 的"允许登录 Web UI"选项为开启,保存后重新打开确认状态保持
- 验证其他 Key 配置选项(名称、过期时间、限额)仍正常保存
- 使用关闭了 Web UI 权限的 Key 尝试登录管理后台,应被拒绝
- 使用开启了 Web UI 权限的 Key 登录管理后台,应正常登录
🏆 优点总结
- 问题定位准确,根因分析清晰
- 修复方案最小化,避免引入额外风险
- 代码质量高,符合项目规范
- PR 描述专业、详细,便于 Code Review
- 附带文档和价格表更新,整体提升项目质量
感谢提交此高质量的修复 PR! 🎉
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
问题描述
Close #58
用户反馈 Key 管理弹框中的"禁止 Key 访问 WebUI"选项修改后无法保存。该选项位于 Key 管理弹框内,其他选项如限额等都可正常修改保存,但该选项修改后保存无法生效,重新打开依然保持打开状态。
根本原因
经过完整的代码追踪,发现问题的根本原因是数据传递链路不完整:
UserKeyDisplay接口(src/types/user.ts:42-66)缺少canLoginWebUi字段getUsers()函数(src/actions/users.ts:60-91)在构建返回数据时没有包含canLoginWebUi字段EditKeyForm组件接收到的keyData没有canLoginWebUi值,导致表单默认值总是true(keyData?.canLoginWebUi ?? true),无论用户如何修改都无法正确保存修复内容
1. 添加类型定义 (
src/types/user.ts)在
UserKeyDisplay接口中添加缺失的字段:2. 返回字段值 (
src/actions/users.ts)在
getUsers()函数中返回canLoginWebUi字段:技术细节
完整的数据流动路径
修复后的完整链路:
相关代码位置
src/types/user.tssrc/actions/users.tssrc/app/dashboard/_components/user/forms/edit-key-form.tsxsrc/actions/keys.tssrc/repository/key.ts测试建议
请按照以下步骤验证修复效果:
修改选项:
验证保存:
验证其他功能:
功能测试(可选):
影响范围
Checklist