[userstags]用户规则与标签热
- 用户规则与标签ID userstags版本 1.8.1插件制作者 elm售价 20 积分1509 行 / 79.7 KBHook / 路由 / 后台页根据发帖量、积分、用户标签等规则自动管理用户分组,支持用户组最低要求自动降级、用户组标签、版面标签权限(AND/OR 模式)、标签管理和配置导入导出。用户组序号越小等级越高,晋升仅升级、降级仅降级。收费插件安装说明购买后点击“授权码”获取一次性授权码;在后台 > 插件广场点击在线安装或更新,并填写该授权码。已购买用户更新免费:每次在线安装或更新前,重新点击“授权码”获取新的一次性授权码即可,无需再次购买;也可直接下载新版后用后台“插件上传”更新。尊重并感谢他人劳动,请勿传播代码。app/plugins/userstags/plugin.php开发日志已有 6 条
个人独立维护项目。
淘帖专辑elm开发插件合集主楼点赞与点评1elm2026-09-01
插件质量报告
插件:
userstagsHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 app.boot 全站请求启动 否 5 - app_users app_users, app_topics, app_replies, app_groups 读 plugin_userstags_rules, plugin_userstags_forum_tags sidebar.feature_links 首页/侧栏快捷功能 否 5 - - - - topic.index_data.load 首页/版块/用户主题列表查询前 否 5 - - app_topics, app_users, app_groups 读 plugin_userstags_forum_tags forum_group_allowed 版块权限检查 否 4 - - app_users, app_groups 读 plugin_userstags_forum_tags reply.after_save 回帖保存后 否 3 - app_users app_users, app_topics, app_replies, app_groups 读 plugin_userstags_rules reply.before_save 回帖发布/编辑表单提交 否 3 - - app_topics, app_users, app_groups 读 plugin_userstags_forum_tags topic.after_save 主题保存后 否 3 - app_users app_users, app_topics, app_replies, app_groups 读 plugin_userstags_rules topic.before_save 主题发布/编辑表单提交 否 3 - - app_users, app_groups 读 plugin_userstags_forum_tags user.after_save 用户注册/资料保存后 否 3 - app_users app_users, app_topics, app_replies, app_groups 读 plugin_userstags_rules admin.tabs 后台管理页标签栏(展示位置:后台Tab) 否 1 - - - - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
未检测到插件数据表声明。
这个插件使用有点复杂。建议给个范例。
用户规则与标签插件 — 简单介绍
它是做什么的?
论坛里的用户通常分成不同的"组"(比如:访客、普通用户、版主、管理员)。不同组有不同的权限。
这个插件帮你做三件事:
1. 给用户贴标签
你可以给每个用户贴上自定义标签,比如"老用户"、"付费会员"、"活跃分子"。一个用户可以有多个标签。
你也可以给整个用户组贴标签,这样组里所有人自动继承这个标签。
2. 设置自动升级规则
你可以定规则,比如:
- "发帖超过 10 篇 → 自动升级到资深用户组"
- "积分达到 100 且有'付费会员'标签 → 升级到 VIP 组"
用户满足条件后,系统会自动把他们调到对应的组,不用你手动一个个改。
3. 按标签控制版块权限
论坛里每个版块(板块)本来只能按用户组控制谁能看、谁能发帖。有了这个插件,你可以按标签来控制,比如:
- "只有带'认证用户'标签的人才能在'精华区'发帖"
- "带'VIP'标签的人才能看到'会员专区'"
举个例子
假设你开了一个论坛,想这样管理:
- 新注册的人都是"新人"
- 发满 5 个帖子自动变成"普通用户"
- 你手动给信得过的人贴上"认证"标签
- 开一个"深度讨论"版块,只有"认证"标签的人才能发帖
用这个插件就能全部实现,而且升级是自动的,你只需要给少数人贴标签就行。
在哪里操作?
在论坛后台 → 插件 → 启用后会多出一个"用户规则与标签"的管理页面,所有设置都在那里完成,不需要改任何代码。
自动停用原因
2026-08-09 11:33:50 TypeError: userstags_tag_override(): Argument #1 ($forum_id) must be of type int, false given, called in /www/index/index.php on line 683 (app/plugins/userstags/plugin.php:230)🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
低危 1 处:750 行
onclick="...confirm('…' . h($tag) . '…')",h()只做 HTML 转义,单引号在属性解码后仍会进入 JS 字符串,标签名含单引号可跳出。因标签仅管理员可创建,实际为自 XSS,建议改为事件委托 +data-*取值。其余 SQL 均参数化、输出均经 h()。⚡ 性能问题
- app.boot 每请求评估:341–349 行在
auto_promote下对登录用户调用userstags_eval_user(多次查询),虽有 300 秒 Cookie 节流仍有开销;userstags_all_tags(112–129 行)每次后台渲染全表扫描 app_users/app_groups。建议评估移入 cron 批量任务并加缓存。 - 批量 N+1:966–971 行全量评估逐用户查询、1106–1109 行组积分调整逐用户
user_points_change、135–148 行标签增删逐行 UPDATE。建议分块 IN / 批量更新。
🐛 功能/规范缺陷
- 【重点】未命中规则即降级:325 行把无匹配用户目标组设为
default_group_id,332 行直接 UPDATE;auto_promote默认开启,会覆盖站长手动分配的非默认分组(如 VIP)。建议"只晋升不降级"或仅对由本插件晋升过的用户降级,并加开关。 - AND 模式未生效:后台 567–568 行提供"必须同时满足(AND)",但 209–223 行
userstags_check_forum_tags恒按 OR(命中任一即通过)。建议实现 AND 分支或移除该选项。 - 内联脚本与全局污染:805–819 行直接输出
<script>并声明无前缀全局_ugLast/ugTagAdd,违反"JS 只走 manifest assets 且加前缀/IIFE";多处内联onchange="ugTagAdd(this)"。建议移入 assets、重命名并事件委托。 - CSS 违反变量规范:1127–1128 行
font-size:12px/18px等多处写死字号,且用非官方变量var(--muted2),应改var(--font-size-*)与--text-muted等。 - 版本号不一致:574 行后台硬编码
v1.5.2,manifest 却是1.6.3,易误导用户。
✅ 修复优先级
自动降级逻辑 → AND 模式 → 性能(cron/批量)→ 内联脚本 → CSS 变量 → 版本号。建议先处理降级风险再发布。
- app.boot 每请求评估:341–349 行在
🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)
插件:用户规则与标签(userstags)v1.6.3
🔒 安全问题
未发现明显安全问题。⚡ 性能问题
未发现明显问题。🐛 功能/规范缺陷
规范一致性建议:后台管理页函数体内未见显式调用核心 need_admin()(依赖核心 admin_page() 路由层统一鉴权兜底,当前不构成越权);涉及写操作时判断请求方式使用手写的 $_SERVER['REQUEST_METHOD'] === 'POST',效果等价于核心 require_post(),但写法与站内多数插件不一致。✅ 修复优先级
低优先级:建议在后台页面函数内补充显式 need_admin()/require_post() 调用,作为纵深防御,避免未来核心路由调整时失去这层保护;不影响当前功能与安全性。旧格式迁移:已将插件代码转存到开发日志,主题正文改为基础介绍。
版本 1.7.0 更新:
适配8.x版本论坛。版本 1.7.2 更新:
修复所有循环,修正权限bug。版本 1.8.0 更新:
增加后台Tab显示版本 1.8.1 更新:
修正数据库兼容问题