feat(web): разделы «Баны» и «Журнал аудита» в настройках сервера

Фаза 4 (AGENT.md 7.17, 7.18): модерация из интерфейса.

- `api/moderation.ts`: список банов, бан, разбан, тайм-аут, кик и журнал
  аудита с фильтрами;
- «Баны»: причина и автор каждого бана, снятие бана и пресеты тайм-аута
  (1/5/10/60/1440 минут) прямо из списка; ответ сервера обновляет кэш, поэтому
  строка исчезает без перезагрузки;
- «Журнал аудита»: фильтры по действию, автору и цели уходят в запрос,
  кнопки «Показать» и «Сбросить»;
- секции видны только с правами BAN_MEMBERS и VIEW_AUDIT_LOG
  (`canBanMembers`, `canViewAuditLog`);
- тесты: список с причиной и автором, снятие бана с обновлением списка,
  тайм-аут с проверкой времени, скрытие секций без прав, фильтры в запросе.
This commit is contained in:
2026-09-20 22:43:56 +03:00
parent 4fb3509128
commit 8613989b21
7 changed files with 764 additions and 3 deletions
+26 -1
View File
@@ -756,7 +756,7 @@
"ping": "Пинг",
"pingValue": "{{ms}} мс",
"pingUnavailable": "—",
"pingHint": "Время ответа инстанса на запрос дашборда",
"pingHint": "Время ответа инстанса на запрос дашборда (HTTP)",
"summary": {
"ok": "Всё в порядке",
"warn": "Есть предупреждения",
@@ -918,6 +918,31 @@
"role_grant": "Выдача роли",
"role_revoke": "Снятие роли"
}
},
"bans": {
"title": "Баны",
"description": "Забаненные не могут вернуться по приглашению, пока бан не снят.",
"empty": "Забаненных нет.",
"remove": "Снять бан",
"noReason": "без причины",
"bannedBy": "забанил {{name}}, {{date}}",
"unknownActor": "неизвестный",
"timeoutLabel": "Тайм-аут:",
"timeoutMinutes_one": "{{count}} минута",
"timeoutMinutes_few": "{{count}} минуты",
"timeoutMinutes_many": "{{count}} минут",
"timeoutMinutes_other": "{{count}} минуты",
"timeoutAction": "Тайм-аут {{minutes}} мин"
},
"audit": {
"title": "Журнал аудита",
"description": "Действия модераторов сервера. Фильтры уходят в запрос.",
"filterAction": "Действие",
"filterActor": "ID автора",
"filterTarget": "ID цели",
"apply": "Показать",
"reset": "Сбросить",
"empty": "Записей нет."
}
},
"navLabel": "Пункты настроек",