V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tlerbao
V2EX  ›  程序员

一般开源系统演示站点禁止修改演示数据都是怎么实现的?

  •  1
     
  •   tlerbao · 2023-03-26 16:10:46 +08:00 · 3188 次点击
    这是一个创建于 633 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般开源系统的演示站点都禁止修改演示数据

    这是怎么实现的,

    比如 ThinkPHP 开发的。

    全局中间件?建个只有读权限的角色?

    16 条回复    2023-03-27 17:52:39 +08:00
    Puteulanus
        1
    Puteulanus  
       2023-03-26 16:13:59 +08:00
    看到的一般是定时重置
    jeesk
        2
    jeesk  
       2023-03-26 16:21:58 +08:00
    我自己看到的项目 java, golang 的项目都是做拦截器,拦截有删除和修改的方法。 不执行数据库操作即可。
    lichao
        3
    lichao  
       2023-03-26 16:42:18 +08:00
    定时重置吧。

    如果禁止修改的话,用户无法完全体验产品的功能
    beetlerx
        4
    beetlerx  
       2023-03-26 16:54:31 +08:00
    建一个数据库只读帐号,只需要全局改一下报错信息就行了
    Huelse
        5
    Huelse  
       2023-03-26 17:09:07 +08:00
    sqlite 定期覆盖即可
    knightdf
        6
    knightdf  
       2023-03-26 17:53:07 +08:00
    定时清理定时重置
    yolee599
        7
    yolee599  
       2023-03-26 18:11:19 +08:00 via Android
    定期重置数据库
    JohnH
        8
    JohnH  
       2023-03-26 18:35:33 +08:00
    1.定期重置数据库和代码,或自动或手动。php 项目如果有漏洞的话,整站比较容易被端掉
    2.有些会利用中间件,来阻止 post 操作,提示演示站不可改
    3.有些会在数据层发生真实写入时,阻拦写入
    4.有些开源项目会加入一个是否演示站的标记,并根据标记细化操作。类似环境变量、NODE_ENV
    tlerbao
        9
    tlerbao  
    OP
       2023-03-26 21:00:13 +08:00
    @Puteulanus @lichao @Huelse @knightdf @yolee599 定时清理数据这种方式,给的权限太大,怕演示站恶意被搞,而且乱增加演示数据进系统看着也乱。

    看来中间件可能目前比较好。
    systemcall
        10
    systemcall  
       2023-03-26 22:01:19 +08:00
    可以在你访问的时候给你专门开一个实例,通过反代让你访问到,隔一段时间就销毁
    群晖和威联通的演示就是这么弄的
    biubiuF
        11
    biubiuF  
       2023-03-26 22:19:06 +08:00
    一般写 cache ,然后用 lru 就行了
    chendy
        12
    chendy  
       2023-03-27 08:33:11 +08:00
    一般能改,不能改就不能体验完整系统功能了
    但是会每天凌晨覆盖数据
    zoyao
        13
    zoyao  
       2023-03-27 10:05:09 +08:00
    完全不给改起不到演示效果吧,一个小时定时重置一次数据库就好了
    flyingghost
        14
    flyingghost  
       2023-03-27 14:23:25 +08:00
    多租户,每进一个体验者分配单独的账号、单独的库、单独的容器、单独的环境等。具体在哪一层隔离看方便程度。
    yinmin
        15
    yinmin  
       2023-03-27 17:33:56 +08:00 via iPhone
    最简单的方法,软件部署到 docker 里,然后 2 小时 recreate 一下
    yinmin
        16
    yinmin  
       2023-03-27 17:52:39 +08:00 via iPhone
    做演示系统,重置数据库最方便的方式是用 docker 。

    例如,你使用的是 mysql 数据库,你先从官方镜像创建一个 mysql 容器模版,数据目录留在容器里,不要 volume 到主机;然后把演示数据导入 mysql ;然后用容器模版生成新镜像。

    从这个新镜像创建新的数据库容器给演示系统使用,定期(例如 2 小时) recreate 这个数据库容器,recreate 一般只需要几百毫秒,非常快。也可以创建多个数据库容器副本给不同的客户。

    演示系统的程序部分也可以使用类似的方式用 docker 部署。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5802 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:46 · PVG 09:46 · LAX 17:46 · JFK 20:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.