管理员禁言
管理员可在社区帖子、回复、卡片/合集/扩展评论、评论回复、公开用户主页,以及后台用户操作中点击「禁言」。后台新增独立入口 /app/admin/mutes。
- 支持 1、3、7、30 天快捷选择及 1–3650 整数天自定义期限。
- 原因可选,最多 500 字;调整期限时从保存时间重新计算。
- 禁止社区发帖、回复、编辑帖子/回复、创建投票,以及卡片/合集/扩展评论和已有评论回复接口。
- 到期自动恢复,支持提前解除;不限制浏览、游戏聊天、点赞或删除自己的内容。
- 普通用户不能执行管理操作;不能禁言自己或其他管理员。
- 服务端每次发言读取主数据库,避免会话缓存或只读副本延迟。
- 后台按禁言中、已到期、已解除过滤,显示每个用户最近一次记录;每次禁言、修改期限及解除都写入操作日志。禁言和日志在同一事务内保存。
数据库先于代码部署
开发库已安装新增的 user_mutes 表。本地 PGlite 会在启动时创建。2026-09-06 发布准备时,生产库也已完成专用表结构安装并核验列及索引;应用发布单独进行。
生产环境部署本功能代码前,先安装新增表(脚本仅创建本功能的表和索引,可重复执行):
powershell
# 使用明确的 PRODUCTION_DATABASE_URL;脚本不会回退到开发库。
pnpm --filter @yumina/server exec tsx scripts/install-user-mutes-schema.ts --production等价 SQL 位于 packages/server/drizzle/0053_user_mutes.sql。与近期独立迁移文件一致,此文件未添加至历史 Drizzle journal;部署时须使用上述专用安装脚本或执行该 SQL。不要仅运行历史迁移命令而漏掉新表。
生产环境须先完成上述表结构安装,再部署包含本功能的应用版本。演示账号和截图仅保存在开发环境。
验证
powershell
pnpm --filter @yumina/server exec tsx --test src/routes/admin-mutes.test.ts src/routes/comment-feeds-are-append-only.test.ts
pnpm build
pnpm typecheck测试使用隔离的内存 PostgreSQL,覆盖权限、非法期限、自身/管理员保护、禁言立即生效、到期边界、提前解除、修改期限、列表过滤、日志原子性、账号删除清理,以及各发言接口的守卫接入。
