Skip to content

演示模式 ​

模板对外提供在线演示时,不希望访问者改动演示数据。演示模式就是为此准备的一键只读开关:开启后后端拦截所有非 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 的白名单数组中追加路径即可
  • 演示模式只挡写操作,不能替代接口权限:登录后的访客仍能查看其权限范围内的数据,敏感数据应通过权限体系控制