- 置顶自动到期ID pin_expiry版本 1.0.0插件制作者 307免费91 行 / 4.4 KBHook / 路由 / 后台页为置顶主题设置到期时间,到期后自动取消置顶,管理员可在主题页随时调整。app/plugins/pin_expiry/plugin.php本插件的完善需要你的积极参与。安装使用中遇到任何,不要抱怨,请直接回帖描述,帮助开发者完善。开发日志已有 1 条
个人独立维护项目。
主楼点赞与点评1domain2026-08-30
插件质量报告
插件:
pin_expiryHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 topic.actions 主题查看页操作区 否 3 - - - 读 plugin_pin_expiry 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_pin_expiry字段 类型 可空 默认值 约束 topic_id uint 否 - 主键 pinned_until uint 否 - - set_by uint 否 0 - set_at uint 否 - - 🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
高危(越权置顶):plugin.php:19、39 用
can_manage_topic($t)放行,而核心的can_manage_topic对「主题作者本人」也返回 true(index.php:2235)。于是任何普通用户都能通过本插件把自己的主题置顶(plugin.php:50set_pinned_topic($tid, true)),核心对置顶/取消置顶明确要求can_manage()(index.php:2451)。建议两处改为can_manage()(或 need_admin + can_manage 双重校验),并把描述里「管理员可调整」与实际权限对齐。⚡ 性能问题
低:plugin.php:56-66 cron 回调无互斥锁,且 foreach 内逐条
set_pinned_topic()与DELETE。建议先收集到期 ID,批量一次取消置顶、一次DELETE ... IN (...)。🐛 功能/规范缺陷
中:plugin.php:40-42 「清除」只删除 plugin_pin_expiry 记录,不取消置顶,主题会变成永久置顶,且本插件没有任何「取消置顶」入口。建议清除时同时
set_pinned_topic($tid, false),或提供独立取消置顶按钮。其余(参数校验、form_token、参数化 SQL、表名前缀、app_db_upsert 键)均合规。✅ 修复优先级
- 高危:收紧置顶权限为
can_manage()。 - 中:清除到期时同步取消置顶。
- 低:cron 加锁并批量处理。
- 高危:收紧置顶权限为
旧格式迁移:已将插件代码转存到开发日志,主题正文改为基础介绍。