演示模式
模板对外提供在线演示时,不希望访问者改动演示数据。演示模式就是为此准备的一键只读开关:开启后后端拦截所有非 GET 请求,访客可以浏览全部页面与数据,但任何增删改操作都会被驳回。参考实现:common/guard/demo-environment.guard.ts。
开启方式
.env 中一行配置控制,默认关闭:
bash
# 开启后标识当前为演示环境,拦截增删改等破坏性操作
SERVER_IS_DEMO=false改为 true 并重启服务即生效,无需改任何业务代码。
拦截规则
| 请求 | 演示环境下的行为 |
|---|---|
| GET | 全部放行,页面与列表数据正常浏览 |
| 非 GET,且在白名单内 | 放行 |
| 其余非 GET | 驳回,提示「演示环境,不允许操作」 |
白名单内置登录与登出两个接口,访客可以正常登录体验,登出释放会话。白名单前缀取自全局路由前缀配置,SERVER_GLOBAL_PREFIX 变化时白名单随之匹配,无需额外维护。
实现机制
- 全局守卫:
DemoEnvironmentGuard在app.module.ts中以APP_GUARD注册,排在守卫链末端,所有请求统一过闸 - 开关读取:经
ConfigService读取SERVER_IS_DEMO,默认false - 非演示环境零开销:开关关闭时直接放行,不产生任何额外判断与请求
注意事项
- 演示模式下在线用户强退、缓存清理、任务执行等管理操作全部失效,属预期行为
- 需要开放更多接口时,在
DemoEnvironmentGuard的白名单数组中追加路径即可 - 演示模式只挡写操作,不能替代接口权限:登录后的访客仍能查看其权限范围内的数据,敏感数据应通过权限体系控制
