五级信任等级体系(user_level)
版本 2.5.1 · 借鉴 Discourse 信任等级核心思想,适配轻量 PHP 论坛架构
设计原则:等级判定 = 纯函数,永不落库(每次现算);仅行为流水、累计计数器与显示缓存入库。
一、等级总览
等级 名称 定位 达标后规则 TL0 新访客 限制档 注册默认;受多项发帖限制 TL1 见习 能力档(仅靠阅读达成) 达标永久保留 TL2 正式成员 能力档(互动验证) 达标永久保留 TL3 社区骨干 考核档 唯一自动浮动档:不达标回落 TL2 TL4 社区领袖 手动档 仅管理员授予/解除,系统永不自动变更;可锁定 线性阶梯:高档判定包含低档条件,天然满足"高档必须先满足低档"。
二、判定条件(默认阈值,全部后台可配)
TL1 见习
条件 默认阈值 口径 浏览不同公开话题 ≥5 全生命周期累计;看自己的主题不计 TL2 正式成员(须先满足 TL1)
条件 默认阈值 口径 账号访问天数 ≥12 天 按天去重,不要求连续 发布新主题 ≥2 发表成功计 1,编辑不计 产生回复的不同话题 ≥3 同一话题多次回复仅计 1 次 浏览不同公开话题 ≥20 同 TL1 口径 收到点赞 ≥1 不同内容去重 送出点赞 ≥1 按点赞者计数 TL3 社区骨干(须先满足 TL2,90 天滚动窗口)
条件 默认阈值 口径 窗口内访问天数 ≥45 天 窗口长度可配,默认 90 天 窗口内回复不同话题 ≥8 同话题去重 窗口内发布新主题 ≥4 — 窗口内浏览话题 ≥40 不同话题去重 窗口内收到点赞 ≥15 — 窗口内送出点赞 ≥25 按点赞者计数 点赞来源不同用户数 ≥5 防互刷:收赞按点赞人去重 违规处罚 无 is_banned / is_muted 现值 TL4 社区领袖
纯手动授予,系统永不自动晋升或降级。权限建议通过用户组体系配置。
三、TL3 浮动机制
晋升:全部 100% 条件满足 → 写入晋升时间 tl3_at 保持:晋升后 14 天宽限期内无条件不掉级 宽限期后,各项 ≥ 阈值的 90% 水位(自动向上取整)即保持 回落:跌破 90% 水位(或被禁言/封禁)→ 回落 TL2,清除晋升时间 再晋升:重新攒满 100% 条件,宽限期重新计时禁言/封禁视为跌破:处罚期间不晋升、宽限期不保护。
四、TL0 新访客限制
限制 默认值 说明 发主题 禁止(需 TL1) 仅限制新建,编辑不受限 发帖间隔 300 秒 叠加于站内限流之上,0 表示不叠加 单帖链接数 最多 2 个 0 禁止链接,99 不限 编辑窗口 发布后 10 分钟 仅限编辑自己的内容 管理员(can_manage / can_access_admin)豁免全部门控。
五、能力解锁矩阵
其他插件通过
hook('user_level.allow', true, ['ability' => '…'])检查,返回非 true 即拦截:能力 ability 默认所需等级 已接入插件 dm_send(发送私信) TL1 direct_messages upload_image(上传附件) TL1 attachment_upload(贴图上传同端点,自动覆盖) invite(兑换邀请码) TL2 invite_code 六、行为采集口径
行为 采集点 去重规则 流水 type 来访 每次登录请求自动记 一天一行 visit 浏览话题 看主题页自动记 一话题一行;看自己的不计 read 发主题 发表成功记 编辑不计 topic 回复 回帖成功记 按话题去重;回复自己话题不计 reply 收到赞 订阅 like_coin.after_mutate 一内容一赞者一行;取消赞不回退 like_topic / like_reply 外部上报 其他插件主动调用 同上 任意白名单 type 外部上报接口:
fire('user_level.log', ['uid' => ?, 'type' => ?, 'ref_id' => ?, 'src' => ?可选, 'day' => 'Y-m-d'可选]);七、防刷规则(强制生效)
- 私信内一切行为不计入统计(不采集)
- 回复自己发布的话题不计入回复话题数
- 同一话题多次回复仅计 1 次
- TL3 校验点赞来源多样性(≥5 个不同用户),小号互刷无法达标
- 被禁言/封禁的用户暂停晋升并回落
- 编辑内容不产生任何计数;取消赞不回退计数(单调,宁低勿高)
八、显示缓存机制
等级判定每次现算(纯函数),但徽章显示走缓存列
map_lv(users 表一列,NULL = 未计算):场景 行为 页面读取 热态 1 条 IN查询直读缓存;缓存为空则纯函数现算并回填用户访问 boot 现算后 diff,等级变化才写缓存 点赞 / 发帖 / 回帖 清空当事人缓存,读取时重算 保存阈值 / 禁言 不批量清空(影响面不可知),各用户访问时自动纠正 后台手动 支持清空单个用户缓存 权限判定(发帖门控、能力检查)不走缓存,始终现算,只有徽章显示可能滞后到当事人下次访问。
九、展示
位置 形式 主题详情页 徽章置于楼层 post-meta区域最前面:emoji + 文字胶囊列表页(首页/版块/个人页) emoji 显示在头像右下角(可开关) 后台可按等级自定义每级的 emoji 图标与文字,并追加自定义 CSS(如
.user_level-badge{border-radius:999px})。十、后台管理(admin_tabs: user_level)
- 信任等级阈值:TL1 / TL2 / TL3 / TL3 保持策略(水位 90%、宽限 14 天)/ TL0 限制 / 能力解锁等级 / 徽章显示
- 用户等级管理:设为 TL4、解除 TL4、锁定为当前等级、解除锁定、清空单个用户显示缓存
十一、数据表
表 用途 生命周期 plugin_user_level_logs行为流水: PK(user_id, type, ref_id, src_uid)+KEY(user_id, day)+KEY(day)cron 每小时修剪,仅保留考察窗口内 plugin_user_level_users一行一人:累计计数器(visit_days / read_topics / reply_topics / topic_count / recv_likes / given_likes)+ tl3_at 水位 + manual_lv / locked_lv + map_lv 显示缓存 随用户永久 插件配置(阈值、徽章等)存于内核
app_plugins.config_json。十二、性能特征
路径 查询数 登录用户任意请求(boot) 1 空转探测 + 汇总 1 条(TL0/TL1 到此为止);TL2+ 加窗口 2 条 主题详情页 / 列表页徽章 热态 1 条(map_lv IN);冷启动惰性回填每人一次 红区渲染钩子(每楼层) 0(只读内存) cron 1 条 DELETE(每小时) 全部单表查询、索引命中、无 JOIN;流水表体积有上界(90 天窗口)。
十三、迁移与卸载
- 升级自动迁移(schema_ver 水位守卫,幂等):v1→v4 重建流水 PK 加点赞者维度、计数器从核心表全量重算
- 卸载 drop 全部插件表;配置随
app_plugins行删除
十四、一期裁剪项(后续可选)
帖级已读统计与阅读时长心跳、待审队列、Wiki 编辑、群组私信、TL3 治理类权限(改分类/重命名/归档/查看已删帖/私密板块)。
主楼点赞与点评1蓝太阳2026-09-09
大招来了
看起来不错,我不懂代码