# PRD_需求文档_普通用户项目名称输入限制

## 基本信息

| 项目 | 内容 |
|------|------|
| 文档类型 | 需求文档 |
| 创建日期 | 2026-07-14 |
| 最后更新 | 2026-07-14 |
| 负责人 | 研发组（Claude 协助） |
| 优先级 | P2 🟠 |
| 状态 | 待开始 |

---

## 一、背景与目标

### 1.1 问题背景

当前项目名称输入框使用 `<input list="projectList">` + `<datalist>` 实现，页面加载时通过 `/api/projects` 一次性拉取全部 **120 个项目名称**填充到前端 datalist，任何登录用户（含普通用户）均可浏览完整项目列表。

| 序号 | 问题 | 风险 |
|------|------|------|
| 1 | 普通用户可查看所有项目名称 | 项目信息泄露——外部人员或低权限用户可获取全部客户项目清单 |
| 2 | `/api/projects` 无权限控制 | 任何已登录用户均可直接调 API 获取完整列表 |

### 1.2 修复目标

1. **普通用户**：项目名称改为纯文本输入（无 datalist 下拉提示），不能浏览项目列表
2. **管理员**：保留 datalist 搜索提示能力（管理员需要看到项目列表辅助操作）
3. **API 鉴权**：`/api/projects` 加 `@login_required` + 角色判断，普通用户返回空列表

---

## 二、需求详情

### 2.1 普通用户项目名称输入限制

#### 2.1.1 问题描述

前端 `loadProjects()` 无条件加载全部项目到 datalist，普通用户在输入框输入即可看到项目名称下拉建议，暴露全部客户项目信息。

#### 2.1.2 问题位置

| 文件 | 位置 | 说明 |
|------|------|------|
| `templates/index.html` | `loadProjects()` + `<datalist id="projectList">` | 无条件加载全部项目 |
| `routes/troubleshoot.py` | `GET /api/projects` | 无角色鉴权 |

#### 2.1.3 需求规格

| 项 | 规格 |
|----|------|
| 普通用户输入方式 | 纯文本输入（移除 datalist 关联），无下拉提示 |
| 管理员输入方式 | 保留 datalist 下拉搜索提示（行为不变） |
| `/api/projects` 鉴权 | 已登录 + admin 角色 → 返回完整列表；已登录 + 普通用户 → 返回空列表 `[]`；未登录 → 401 |
| 前端判断依据 | 用户角色从 `/api/user/info` 获取，`loadProjects()` 根据角色决定是否填充 datalist |
| 搜索不受影响 | 普通用户手动输入项目名称后，搜索仍按 project_filter 正常工作（输入准确即可） |

#### 2.1.4 验收标准

- [ ] 普通用户项目名称输入框无下拉提示（纯文本输入）
- [ ] 管理员项目名称输入框保留 datalist 下拉搜索提示
- [ ] 普通用户调 `/api/projects` 返回空列表
- [ ] 管理员调 `/api/projects` 返回完整 120 个项目
- [ ] 普通用户手动输入项目名称后，搜索/AI 分析功能正常
- [ ] 未登录调 `/api/projects` 返回 401

---

## 三、影响范围

### 3.1 涉及文件

| 文件 / 目录 | 变更类型 | 说明 |
|------------|---------|------|
| `routes/troubleshoot.py` | 修改 | `/api/projects` 加角色鉴权 |
| `templates/index.html` | 修改 | `loadProjects()` 按角色决定是否填充 datalist |

### 3.2 风险评估

| 风险项 | 等级 | 缓解措施 |
|--------|------|---------|
| 普通用户输入项目名拼写错误导致搜索不到 | 🟡 低 | 原有搜索本就支持无 project_filter 全局搜索；提示文字"请输入项目名称"已足够 |
| 前端角色判断可被绕过（F12 改 DOM） | 🟡 低 | 后端 API 鉴权是安全基线，前端只是 UX 层面的隐藏 |

---

## 四、非功能需求

| 项 | 要求 |
|----|------|
| 安全 | 后端 API 是安全基线，前端只是体验优化 |
| 兼容 | 不影响管理员现有操作流程 |
| 性能 | 无额外性能开销 |

---

## 五、时间估算

| 任务 | 工时 |
|------|------|
| 后端 API 鉴权 | 0.5h |
| 前端角色判断 | 0.5h |
| 测试验证 | 0.5h |
| **合计** | **1.5h** |

---

## 六、验收清单

- [ ] 普通用户看不到项目名称下拉列表
- [ ] 管理员项目名称下拉功能正常
- [ ] `/api/projects` 后端鉴权生效
- [ ] 普通用户搜索不受影响

---

## 维护记录

| 日期 | 更新内容 | 更新人 |
|------|---------|--------|
| 2026-07-14 | 初版创建 | 研发组 |
