• 307
    置顶自动到期
    ID pin_expiry版本 1.0.0插件制作者 307免费91 行 / 4.4 KBHook / 路由 / 后台页
    为置顶主题设置到期时间,到期后自动取消置顶,管理员可在主题页随时调整。
    app/plugins/pin_expiry/plugin.php
    本插件的完善需要你的积极参与。安装使用中遇到任何,不要抱怨,请直接回帖描述,帮助开发者完善。
    开发日志已有 1 条

    个人独立维护项目。

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

    插件质量报告

    插件:pin_expiry

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    topic.actions主题查看页操作区否3---读 plugin_pin_expiry

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

    数据字典

    plugin_pin_expiry

    字段类型可空默认值约束
    topic_iduint否-主键
    pinned_untiluint否--
    set_byuint否0-
    set_atuint否--
    #1
  • 350

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

    🔒 安全问题

    高危(越权置顶):plugin.php:19、39 用 can_manage_topic($t) 放行,而核心的 can_manage_topic 对「主题作者本人」也返回 true(index.php:2235)。于是任何普通用户都能通过本插件把自己的主题置顶(plugin.php:50 set_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 键)均合规。

    ✅ 修复优先级

    1. 高危:收紧置顶权限为 can_manage()。
    2. 中:清除到期时同步取消置顶。
    3. 低:cron 加锁并批量处理。
    #2
  • 307

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

    #3

发表回复

登录后回复