# 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`(默认)时整体放行、零额外开销。 ## 配置 ```yaml app: demo: true # 演示模式开关 ``` 对应环境变量:`APP_APP_DEMO=true`。 ## 与其他模式的关系 | 模式 | 用途 | 与演示模式 | |---|---|---| | app.prod | 生产红线校验(密钥/万能码/生成器) | 可同时开启 | | app.demo | 拦截写操作 | 演示站通常同时开 prod + demo | 演示站推荐组合:`prod=true`(拒绝弱密钥等)+ `demo=true`(拒绝写操作)+ 生成器关闭。 ## 演示环境其他配套建议 - 独立数据库实例,定期从种子数据重置 - 文件上传目录可写但定期清理 - 日志级别调至 info,避免刷屏 - 限流保持开启(防参观者误触发高频) ## 下一步 → [5.9 多租户隔离](/zh/core/tenant.html)