Supabase、审核后台与 Cloudflare Pages 部署
Quiz App 的云端部分主要解决三个问题:账号身份、题库共享和多端进度。项目没有自己搭完整后端,而是用 Supabase 提供 PostgreSQL、Auth、RLS 和 Storage,再用 Cloudflare Pages Functions 做少量接口层。
云端表结构
文档里的核心表包括 profiles、question_banks、questions、user_progress 和 upload_requests。profiles 扩展用户角色;question_banks 保存题库审核状态;questions 保存题目内容;user_progress 保存用户进度。
profiles
question_banks(review_status: pending/approved/rejected)
questions(bank_id, type, content, answer, image_url)
user_progress(user_id, question_id, is_correct, time_taken)
题库审核
上传后的题库默认是 pending。管理员批准后全员可见;驳回后只有上传者和管理员可见。这个规则让“全员共享”不会变成无控制的公共写入,也给题库质量留出审核空间。
管理员后台
后台包括系统概览、题库审核和用户管理。用户管理里涉及角色调整和密码重置,这类操作通过 Supabase RPC 和 SECURITY DEFINER 函数完成,避免把高权限逻辑散落在前端。
Cloudflare Pages Functions 的位置
部署版里,前端请求会经过 Pages Functions。它负责把 Supabase Auth、REST 请求和 AI 格式整理请求转到对应服务。这样浏览器侧只持有 publishable key,真正敏感的 AI key 放在 Cloudflare 环境变量里。
部署纪律
- 本地开发用环境文件区分 Supabase URL 和 publishable key。
- 生产环境的 AI key 只放在 Cloudflare Dashboard。
- 数据库结构变更通过迁移脚本记录。
- 发布前运行测试和安全检查脚本。
这套方案的好处是轻:前端仍然可以作为静态站部署,但账号、审核和同步这些能力不会被硬塞进浏览器本地逻辑里。