1.6 KiB
1.6 KiB
5.8 演示模式
:::tip 概述
演示模式用于对外展示环境:写操作一律拒绝,读操作与登录类公开接口放行。一个开关(app.demo)保护演示数据不被参观者改动,同时不影响浏览体验。
:::
行为矩阵(internal/middleware/demo.go 实际逻辑)
| 请求 | demo=true 时 |
|---|---|
| GET / HEAD / OPTIONS(读方法) | 放行 |
| 免登录公开路径(登录/验证码/令牌兑换等) | 放行 |
| 其余方法(POST / PUT / DELETE…) | 拒绝,返回 CodeDemoMode("演示环境,禁止操作!") |
判定只看 HTTP 方法与公开标记:读方法与公开路径直接 c.Next(),其余一律拒绝并写入拒绝原因(与限流同款 denied 通道,不产生操作日志)。app.demo=false(默认)时整体放行、零额外开销。
配置
app:
demo: true # 演示模式开关
对应环境变量:APP_APP_DEMO=true。
与其他模式的关系
| 模式 | 用途 | 与演示模式 |
|---|---|---|
| app.prod | 生产红线校验(密钥/万能码/生成器) | 可同时开启 |
| app.demo | 拦截写操作 | 演示站通常同时开 prod + demo |
演示站推荐组合:prod=true(拒绝弱密钥等)+ demo=true(拒绝写操作)+ 生成器关闭。
演示环境其他配套建议
- 独立数据库实例,定期从种子数据重置
- 文件上传目录可写但定期清理
- 日志级别调至 info,避免刷屏
- 限流保持开启(防参观者误触发高频)