• freepayzz
    帖子积分查看
    ID paid_topics版本 1.0.3插件制作者 freepayzz免费145 行 / 9.8 KBHook / 路由 / 后台页
    支持购买查看帖子和回复后免费查看帖子。作者:AI开源论坛(https://bolgk.eu.org/)
    app/plugins/paid_topics/plugin.php
    本插件的完善需要你的积极参与。安装使用中遇到任何,不要抱怨,请直接回帖描述,帮助开发者完善。
    开发日志已有 1 条

    个人独立维护项目。

    • freepayzz
      freepayzz
      版本 1.0.3 5d6e41a89e83 更新:旧格式迁移:已将插件代码转存到开发日志,主题正文改为基础介绍。release
    主楼
  • 质量报告

    插件质量报告

    插件:paid_topics

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    reply.after_render主题查看页/回帖列表逐条渲染是5--app_topics 修正❗️写 plugin_paid_topic_unlocks, plugin_paid_topics 修正❗️
    topic.after_render首页/版块列表/主题查看逐条渲染是5--app_topics 修正❗️写 plugin_paid_topic_unlocks, plugin_paid_topics 修正❗️
    reply.after_save回帖保存后否3---写 plugin_paid_topics, plugin_paid_topic_unlocks
    topic.after_save主题保存后否3---写 plugin_paid_topics, plugin_paid_topic_unlocks
    topic.form_extra主题发布/编辑表单否2---写 plugin_paid_topics, plugin_paid_topic_unlocks
    topic.after_delete非系统hook否1---写 plugin_paid_topic_unlocks, plugin_paid_topics

    颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。只有操作实际处于可执行的循环路径时,才会标记“修正❗️”。

    数据字典

    plugin_paid_topics

    字段类型可空默认值约束
    topic_iduint否-主键
    price_pointsuint否0-
    reply_unlockINTEGER否0-
    created_atuint否--
    updated_atuint否--

    plugin_paid_topic_unlocks

    字段类型可空默认值约束
    topic_iduint否-主键
    user_iduint否-主键
    sourcestring否'purchase'-
    price_pointsuint否0-
    created_atuint否--
    #1
  • 350

    🔍 插件审查报告(对照《AI 开发规则》与开发者文档)

    购买解锁的积分扣减/入账在事务内原子完成、价格做了上下限收敛,方向正确。但存在一处红区违规与几处功能缺陷,需优先处理。

    🔒 安全问题

    未发现 SQL 注入/XSS。购买路由有 require_post()+need_login() 与 form_token(),积分扣减用 points>=? 条件 UPDATE 原子防超扣。仅提示:plugin.php:116-128 在 tx() 内调用 err('积分不足') 会直接退出,建议进入事务前先校验余额,事务内只保留确定性落账。

    ⚡ 性能问题

    plugin.php:60-68 将 paid_topics_locked_render 挂到 topic.after_render/reply.after_render,其调用链会逐条执行多条 one()/row() 查询(价格、购买状态、回复解锁)。这两个钩子位于渲染循环内(核心在列表页与详情页逐条触发),属规范①红区违规,首页列表会出现明显 N+1。请改为在 topic.replies 或 app.boot 一次性批量预加载后做内存读取。

    🐛 功能/规范缺陷

    1. plugin.php:98-107 挂载 topic.after_delete,但核心只 fire topic.before_delete,该钩子不存在,清理永不执行,主题删除后会残留付费/解锁记录。请改用 topic.before_delete。
    2. plugin.php:79-89 直接读 $_POST 价格字段,编程式保存(MCP 等未带该字段)会把价格重置为 0。请仅在字段存在时更新,否则保留原值。
    3. plugin.php:38/43/48 等多处运行时路径调用 paid_topics_schema() 建表/补列/建索引,首次请求触发 DDL。Schema 应只在 install 执行。
    4. plugin.php:145 description 末尾拼接作者与外部链接,后台页脚也硬编码外链;作者信息应放 author/author_url 字段。

    ✅ 修复优先级

    先修红区 N+1(性能/核心)与删除钩子名错误,再处理价格被误清零与 Schema 收敛,最后清理 description 外链。

    #2
  • freepayzz

    旧格式迁移:已将插件代码转存到开发日志,主题正文改为基础介绍。

    #3

发表回复

登录后回复