- 帖子积分查看ID paid_topics版本 1.0.3插件制作者 freepayzz免费145 行 / 9.8 KBHook / 路由 / 后台页支持购买查看帖子和回复后免费查看帖子。作者:AI开源论坛(https://bolgk.eu.org/)app/plugins/paid_topics/plugin.php本插件的完善需要你的积极参与。安装使用中遇到任何,不要抱怨,请直接回帖描述,帮助开发者完善。开发日志已有 1 条
个人独立维护项目。
主楼 插件质量报告
插件:
paid_topicsHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 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_id uint 否 - 主键 price_points uint 否 0 - reply_unlock INTEGER 否 0 - created_at uint 否 - - updated_at uint 否 - - plugin_paid_topic_unlocks字段 类型 可空 默认值 约束 topic_id uint 否 - 主键 user_id uint 否 - 主键 source string 否 'purchase' - price_points uint 否 0 - created_at uint 否 - - 🔍 插件审查报告(对照《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一次性批量预加载后做内存读取。🐛 功能/规范缺陷
plugin.php:98-107挂载topic.after_delete,但核心只 firetopic.before_delete,该钩子不存在,清理永不执行,主题删除后会残留付费/解锁记录。请改用topic.before_delete。plugin.php:79-89直接读$_POST价格字段,编程式保存(MCP 等未带该字段)会把价格重置为 0。请仅在字段存在时更新,否则保留原值。plugin.php:38/43/48等多处运行时路径调用paid_topics_schema()建表/补列/建索引,首次请求触发 DDL。Schema 应只在 install 执行。plugin.php:145description 末尾拼接作者与外部链接,后台页脚也硬编码外链;作者信息应放 author/author_url 字段。
✅ 修复优先级
先修红区 N+1(性能/核心)与删除钩子名错误,再处理价格被误清零与 Schema 收敛,最后清理 description 外链。
旧格式迁移:已将插件代码转存到开发日志,主题正文改为基础介绍。