• bbs1org
    申请VIP
    ID vip_apply版本 1.0.1插件制作者 bbs1org免费417 行 / 26.3 KBHook / 路由 / 后台页
    用户回答问题申请VIP,管理员审核通过后自动更换用户组并发放积分奖励,双方均收到站内通知。
    app/plugins/vip_apply/plugin.php
    开发日志已有 2 条

    个人独立维护项目。

    • bbs1org
      bbs1org
      版本 1.0.1 7d14722357b9 更新:修正通知格式或者积分变动不进积分规则的问题release
    • bbs1org
      bbs1org
      版本 1.0.0 c17100bf729b 更新:添加预览
    主楼
  • 质量报告

    插件质量报告

    插件:vip_apply

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    sidebar.feature_links首页/侧栏快捷功能否5---读 plugin_vip_apply_applies

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

    数据字典

    plugin_vip_apply_applies

    字段类型可空默认值约束
    idid否-主键、自增
    user_iduint否--
    answerstext否--
    statusINTEGER否0-
    remarkstring否''-
    handled_byuint否0-
    handled_atuint否0-
    created_atuint否--
    #1
  • bbs1org

    版本 1.0.0 更新:
    新增通知接收人设置与待审核数字提醒;管理者前台入口直达管理后台,申请列表置顶;优化查询性能与并发提交校验,修复封禁账号可提交申请等问题。

    #2
  • 399

    🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件为新发布插件,独立首次审查)

    插件:申请VIP(vip_apply)v1.0.0

    🔒 安全问题
    未发现越权或注入类问题。写操作路由均有 need_login()/need_admin()(依赖核心路由层)+ require_post() + CSRF 校验;所有输出经 h() 转义;SQL 均参数化。

    ⚡ 性能问题
    未发现明显问题。列表页用户信息通过 rows_by_ids() 批量读取,未见循环查询。

    🐛 功能/规范缺陷

    1. 审批操作存在并发重复处理风险:vip_apply_handle()(plugin.php 约293-310行)在事务外先读取申请状态(row('plugin_vip_apply_applies', 'id', $apply_id))并判断 status!==0 拦截重复处理,但随后事务内的 UPDATE 语句(SET status=1... WHERE id=?)未附加 AND status=0 条件,且发放积分的 user_points_change() 调用在事务之外、同样没有重新校验状态。若同一条待审申请被连续点击两次"通过"(或两名有权限的管理员同时处理同一条),两次请求都可能在状态判断阶段读到 status=0 而先后通过检查,导致积分被重复发放、站内通知被重复发送。更新日志称"优化并发提交校验",但核实后该防护只覆盖了申请人提交侧(vip_apply_submit 在事务内重新查询最新状态),审批侧未见同等保护。建议将审批更新改为 UPDATE ... SET status=1 WHERE id=? AND status=0,并依据受影响行数判断是否已被他人处理,同时把加分与通知也纳入这层判断之后再执行。
    1. 管理入口与实际权限判定不一致:vip_apply_is_manager()(plugin.php 约118-121行)用 can_access_admin() || can_manage() 判定"是否管理者",只要满足其一即会在侧栏展示"VIP申请管理"入口,并在访问 /vip_apply 时直接跳转到后台设置页(admin_url(['tab'=>'vip_apply']))。但该后台页挂载在 admin_tabs,实际访问权限由核心 admin_page() 统一用 need_admin()(即 can_access_admin())把关。因此只被授予"允许用户和内容管理"(allow_manage=1)但未授予"允许后台管理"(allow_admin=0)的用户组成员,会先看到管理入口、被强制跳转,随后在后台页遭遇"无权限"报错,形成死胡同体验。建议统一判定口径,例如仅用 can_access_admin() 作为"管理者"标准,或者管理端也允许 can_manage() 用户实际访问。

    ✅ 修复优先级
    优先处理第 1 项(审批并发重复发放积分,涉及资金/积分安全);第 2 项为体验一致性问题,建议一并修正。

    #3
  • bbs1org

    版本 1.0.0 更新:
    添加预览

    #4
  • dcve

    paste-20260828-193500.png

    显示两张图片

    #5
  • dcve

    布局有点问题

    #6
  • bbs1org

    ok

    #7
  • one

    你怎么又变成admin了?

    #8
  • bbs1org

    英文时尚

    #9
  • Wuyf

    挺好玩

    #10
  • bbs1org

    版本 1.0.1 更新:
    修正通知格式或者积分变动不进积分规则的问题

    #11

发表回复

登录后回复