用户管理

用户管理是工坊主管专属的模块,用来维护全部用户的基础信息、角色、头衔、每日编辑记录和管辖区,也是配置主站管辖区的唯一入口。

入口在侧边栏「用户管理」,路径 /4_us。

仅工坊主管可访问。

整体布局

页面自上而下分四部分。

顶部是统计卡片,显示总用户数,以及五个角色各自的用户数量。角色按工坊主管、精英工匠、工坊工匠、工坊成员、已封禁的顺序排列,每张卡片的数字用该角色的主题色显示。

接下来是工具栏,包含一个按昵称或 ID 搜索的输入框,一个角色筛选下拉,以及「重置」按钮。

再往下是批量操作栏,包含当前已选用户数、操作类型下拉、值输入框和执行按钮。默认未选中任何用户时批量操作栏仍然显示,只是执行按钮不可用。

最下方是用户表格,列出全部用户。

用户表格

表格每行显示以下内容。

第一列是多选框,用于批量操作。

第二列是用户 ID,居中显示。

第三列是头像,圆形缩略图。头像来源优先使用用户自己设置的直链,没有时使用默认头像。

第四列是昵称。

第五列是当前角色的徽章,颜色按角色区分。

第六、七、八列分别是编辑管辖区、审核管辖区、文件管辖区的概要。概要显示为「全部」、「部分(N项)」或「无」三种状态。全部指该类目三个子项都设为全部授权;部分指有具体资源 ID 但未覆盖全部;无指没有任何授权。

最后一列是操作按钮,包含「编辑」和「模拟」。

表格无分页。全部用户一次性加载,靠搜索和筛选定位。

批量操作

在用户表格勾选一个或多个用户后,批量操作栏的「已选」计数更新。

操作类型下拉提供以下选项。

直接修改昵称,把选中用户的昵称统一改为输入框的值。

头像直链,把选中用户的头像统一改为输入的 URL。留空则恢复为默认头像。

密码,把选中用户的密码统一重置为输入值。密码长度少于 8 位会被拒绝。

用户组,把选中用户的角色统一改为输入的 0 至 4 之间的数字。

添加头衔,为选中用户添加一条头衔。输入框填头衔文字,旁边的颜色选择器选颜色。若用户原本没有头衔,新头衔会自动设为佩戴状态。

删除头衔(按索引),把选中用户的第 N 条头衔删除。索引从 0 开始计数。若被删除的是当前佩戴的头衔,自动切换为列表中的最后一条。

选择佩戴头衔(索引),把选中用户的佩戴头衔切换为第 N 条。索引填 -1 表示不佩戴。

点「执行」前会弹一次确认,列出本次要操作的用户数量。执行过程中按钮变为加载状态,完成后弹出提示,包含成功数和失败数及失败原因。

批量操作不检查角色层级,工坊主管可以对任意用户批量执行。

编辑用户

点用户表格里的「编辑」按钮,弹出编辑模态框。模态框较宽,内部内容按章节分段,可滚动查看。

模态框顶部是用户的基本信息与选料角色选择。

头像、昵称、用户 ID 显示在左侧,右侧是一个选料角色的下拉框,用于调整 sel_role。

选料角色的调整与用户管理是两套独立权限。

基础信息

基础信息区包含用户 ID、昵称、用户组、注册时间四个字段。

用户 ID 和注册时间只读。

昵称可以修改,改动会在保存时写入。

用户组也就是主站角色,可以从下拉框中选择 0 至 4 的任一值。

修改密码

点击「修改密码」展开密码输入区,包含新密码和确认密码两个字段。

两个字段都填写且一致时,保存时会同时更新密码。两个都留空时不修改密码。只填一个或两个不一致时,保存会被拒绝并提示。

密码经哈希后写入,明文不保留。

此功能仅用于某些极端情况下为用户解锁账号,请勿随意使用!

头像直链

头像直链区只有一个输入框,填图片的完整 URL。

留空时该用户恢复为默认头像。

填写后,主站各处展示该用户的地方都使用该 URL。

头衔管理

头衔管理区显示该用户当前拥有的全部头衔。

每条头衔以标签形式展示,包含一个颜色圆点、头衔文字,以及一条操作按钮行,包含修改和删除。当前佩戴的头衔额外带一个「佩戴中」的绿色标签。

下方是添加区,包含头衔文字输入框、颜色选择器和「添加」按钮。点添加后立即发送请求,成功后头衔列表刷新。

佩戴区包含一个下拉框和「佩戴」按钮。下拉框列出该用户所有头衔加一个「不佩戴」选项。选中后点佩戴立即生效。

头衔的增删改和佩戴都通过 /4_us/titles 接口实时提交,不依赖模态框的保存按钮。

每日编辑记录

每日编辑记录区用于维护用户的编辑历史统计。用户的编辑次数和提交审核次数会由系统自动累加,这里主要用于查看和手动修正。

顶部是年份和月份下拉,用于筛选显示。默认选当前年月。

表格列出所选月份内的记录,每条记录包含日期、编辑次数、提交审核次数,以及删除按钮。

日期格式为 YYYY-MM-DD。编辑次数和提交审核次数为整数,可以直接在表格里修改。

「添加一行」按钮在末尾追加一条空白记录,日期留空。填写完毕后会自动保存。

删除按钮移除该条记录。留空或日期格式不正确的记录在保存时会被过滤掉。

管辖区设置

管辖区设置是模态框里最复杂的一块,用来配置编辑区、审核区、文件区三类管辖区。

区切换

顶部有一排横向按钮,分别是编辑区、审核区、文件区。当前选中项高亮。

三类管辖区相互独立,切换时当前区的选中内容会暂存,切回来时恢复。

类目切换

区切换下方是类目按钮,依次为光影包、资源包、地图、整合包、模组。

前三个类目共用一套 ID 空间,来自主站资源表。整合包和模组来自选料的 sel_external_resource 表,两套 ID 独立。

主站资源页的管辖区一般只用到前三个类目。整合包和模组主要服务于选料模块。

全部授权开关

类目按钮旁边是「全部授权」开关。打开后,当前类目下所有资源都授权,项目列表整体变为不可选状态。

关闭后恢复为按项目选择的模式。

搜索与列表

「全部授权」开关下方是项目搜索框和数量提示。

搜索框按项目 ID 或名称模糊匹配。列表显示匹配的项目,每项带一个多选框。

未开启全部授权时,已选中的项目显示为勾选状态,点击可切换。

已开启全部授权时,列表所有项目都勾选且置灰,不能单独取消。

已选项目

列表下方是「已选项目」区域,显示当前类目下已选中的所有项目。

每条以标签形式展示,包含项目名、项目 ID 和移除按钮。

点移除按钮把该项目从已选列表中移除,同时列表中的对应项取消勾选。

开启全部授权时,已选区显示为「已授权全部项目」,不显示单条标签。

切换时的暂存逻辑

在区或类目之间切换时,当前类目的选择会先写入内存中的 areaData,再加载新类目的选择。

因此你可以按任意顺序在三个区、五个类目之间来回切换,最终保存时会把所有改动一并提交。

保存

模态框底部有两个按钮。

「取消」关闭模态框,所有未保存的改动丢失。

「保存」把昵称、角色、密码(若填写)、头像直链、每日编辑记录、三类管辖区一次性提交给后台。

保存时后台会做以下校验。

密码与确认密码一致。

密码长度不少于 8 位。

编辑记录数组的每个元素有 date 字段且格式为 YYYY-MM-DD。

三类管辖区都是合法的字典结构,包含 resourcepack、shaderpack、map 三个键。

管辖区里的资源 ID 会与对应类目的实际资源核对。无效的 ID 会被自动过滤,保存完成后提示里会附带被过滤的数量。

保存成功后模态框关闭,用户列表刷新。若保存前处于模拟状态,保存不会解除模拟。

模拟用户

点用户表格里的「模拟」按钮,二次确认后会以该用户的身份重新进入后台。

模拟期间页面顶部出现一条醒目的提示条,说明当前处于模拟状态,并提供「退出模拟」按钮。

模拟时会向 impersonation_log 表写入一条记录,包含操作者 ID、目标用户 ID、目标用户昵称、开始时间、操作 IP 和 User-Agent。

会话中额外保存 _impersonator_id 和 _impersonate_expiry。前者是原管理员 ID,用于退出模拟时还原;后者是模拟的过期时间戳。

模拟后浏览器会跳回主站首页,此时以目标用户的身份浏览和操作。目标用户在主站的权限就是模拟期间的权限。

模拟存在有效期,超时后会话中的模拟标识自动失效,恢复为原管理员身份。

注意:此功能仅用作开发者排查问题,所有用户模拟操作均会被计入日志审计,且会永久保留。

退出模拟

模拟期间,页面顶部提示条里的「退出模拟」按钮可随时退出。

退出时后台做以下事情。

查询原管理员账号是否仍然存在。不存在则清空会话,跳回主站登录页。

把 impersonation_log 中该次模拟对应的记录标记为已结束,写入结束时间。

恢复会话中的 user_info 为原管理员的 ID。

清除 _impersonator_id 和 _impersonate_expiry。

退出后,如果是从模态框触发的退出模拟,会刷新当前页面。如果是从顶部提示条触发的,会跳转到主站首页或原页面。

与选料权限页面的关系

用户管理页面里的「选料角色」下拉框直接修改 sel_role,但不涉及 sel_edit_area 和 sel_review_area。

选料管辖区的完整配置在选料模块的「选料权限」页面,由料总管操作。

如果一个用户同时是工坊主管和料总管,两个页面都能改他的选料相关字段,以最后一次保存为准。