feat: 新增用户管理(用户增删改查、密码重置、角色权限、会话认证)与 API 指南

- 新增 app/api/deps.py、app/core/users.py、app/core/sessions.py:会话鉴权依赖、
  用户存储(PBKDF2-HMAC-SHA256 + 随机 salt,Redis/内存降级)、会话签发与校验(TTL 12h)
- auth.py 新增用户管理端点(列表/创建/重置密码/删除)与 admin/user 角色权限边界,
  user 访问用户管理返回 1006,禁删自己与最后一个 admin
- admin.html 新增用户管理面板(仅 admin 挂载)与 API 指南在线测试台
- Dockerfile 将 uv 放入 PATH;docker-compose 调整 qdrant 依赖为 service_started
  并移除依赖 curl 的 healthcheck(官方镜像不含 curl)
- 新增用户管理测试(users/sessions/auth_api/auth_integration),全量 461 项测试通过

Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
This commit is contained in:
2026-07-31 21:29:02 +08:00
parent 2ab8b56a01
commit 92b062c048
24 changed files with 2771 additions and 350 deletions
+4 -8
View File
@@ -16,7 +16,7 @@ services:
- .env
depends_on:
qdrant:
condition: service_healthy
condition: service_started
redis:
condition: service_healthy
ollama:
@@ -36,11 +36,8 @@ services:
- "${QDRANT_DASHBOARD_PORT:-6334}:6334"
volumes:
- ${NAS_DATA_DIR:-./data}/qdrant:/qdrant/storage
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6333/healthz"]
interval: 10s
timeout: 5s
retries: 5
# 官方 qdrant 镜像不含 curl/wget,内部 healthcheck 无法执行 HTTP 探测;
# 改用 service_started 依赖(qdrant 启动即就绪),由 app 的 restart 策略兜底。
networks:
- qmdsearch
@@ -48,8 +45,7 @@ services:
image: redis:7-alpine
container_name: qmdsearch-redis
restart: unless-stopped
ports:
- "${REDIS_PORT:-6379}:6379"
# 仅内部网络访问,不对外暴露主机端口(避免与 NAS 已有 redis 的 6379 冲突)
volumes:
- ${NAS_DATA_DIR:-./data}/redis:/data
healthcheck: