Документировать автомодерацию (settings/hits/UI). Refs EventHub/EventHubSpec#4
This commit is contained in:
+11
-2
@@ -118,6 +118,13 @@ EventHub — платформа для управления событиями
|
|||||||
- Пользователи могут отправлять жалобы (`report`) на календари, события, отзывы.
|
- Пользователи могут отправлять жалобы (`report`) на календари, события, отзывы.
|
||||||
- Модераторы могут просматривать жалобы и принимать меры (скрывать контент, блокировать).
|
- Модераторы могут просматривать жалобы и принимать меры (скрывать контент, блокировать).
|
||||||
- Список запрещённых слов (`banned_word`) для фильтрации контента.
|
- Список запрещённых слов (`banned_word`) для фильтрации контента.
|
||||||
|
- **Автомодерация** (`logic_automoderation`):
|
||||||
|
- Настройки (`automod_settings`, singleton): `keyword_action` (`reject` | `flag` | `censor`, default `flag`), `match_mode` (`word_boundary` | `substring`, default `word_boundary`), `report_threshold` (integer ≥ 1, default `3`).
|
||||||
|
- При create/update calendar (`title`, `description`), event (`title`, `description`), review (`comment`) выполняется scan бан-слов.
|
||||||
|
- `reject` — сохранение отклоняется (`400`, content banned); `censor` — маскирование `***` + hit в очередь; `flag` — сохранение + soft-hide + hit (`review` → `hidden`, `event`/`calendar` → `frozen`, reason `auto:keyword`).
|
||||||
|
- Порог жалоб: считаются только `pending`; при достижении порога — soft-hide (`auto:report_threshold`) + hit; dismissed/reviewed не учитываются.
|
||||||
|
- Очередь `automod_hit`: `open` | `approved` | `rejected`; approve восстанавливает сущность, reject оставляет/усиливает блокировку.
|
||||||
|
- WS админам: `automod_hit`; аудит от системного актора `system`.
|
||||||
- Аудит действий администраторов (`admin_audit`).
|
- Аудит действий администраторов (`admin_audit`).
|
||||||
|
|
||||||
### 2.8. Баг-трекер (автоматический)
|
### 2.8. Баг-трекер (автоматический)
|
||||||
@@ -146,7 +153,7 @@ EventHub — платформа для управления событиями
|
|||||||
#### 2.10.1. Ролевая модель администраторов
|
#### 2.10.1. Ролевая модель администраторов
|
||||||
- `superadmin` — полный доступ, может управлять другими администраторами.
|
- `superadmin` — полный доступ, может управлять другими администраторами.
|
||||||
- `admin` — управление пользователями, контентом, подписками.
|
- `admin` — управление пользователями, контентом, подписками.
|
||||||
- `moderator` — модерация контента (жалобы, отзывы).
|
- `moderator` — модерация контента (жалобы, отзывы, очередь автомодерации).
|
||||||
- `support` — работа с тикетами.
|
- `support` — работа с тикетами.
|
||||||
|
|
||||||
#### 2.10.2. Эндпоинты для управления ролями и аудитом
|
#### 2.10.2. Эндпоинты для управления ролями и аудитом
|
||||||
@@ -259,7 +266,7 @@ src/
|
|||||||
- `POST /v1/reviews` — создать отзыв.
|
- `POST /v1/reviews` — создать отзыв.
|
||||||
- `GET /v1/reviews` — список отзывов.
|
- `GET /v1/reviews` — список отзывов.
|
||||||
- `PUT /v1/reviews/:id` — обновить отзыв.
|
- `PUT /v1/reviews/:id` — обновить отзыв.
|
||||||
- `POST /v1/reports` — пожаловаться.
|
- `POST /v1/reports` — пожаловаться (`target_type`: `event` | `calendar` | `review`).
|
||||||
- `GET /v1/tickets` — тикеты пользователя.
|
- `GET /v1/tickets` — тикеты пользователя.
|
||||||
- `POST /v1/tickets` — создать или обновить тикет (дедуп по `error_hash`): body `{ error_message, stacktrace?, context?, source?: frontend|manual }`; ответ 201 (или 429 при rate-limit новых).
|
- `POST /v1/tickets` — создать или обновить тикет (дедуп по `error_hash`): body `{ error_message, stacktrace?, context?, source?: frontend|manual }`; ответ 201 (или 429 при rate-limit новых).
|
||||||
- `GET /v1/tickets/:id` — статус тикета.
|
- `GET /v1/tickets/:id` — статус тикета.
|
||||||
@@ -275,6 +282,8 @@ src/
|
|||||||
- `GET /v1/admin/reports`, `GET /v1/admin/reports/:id` — жалобы.
|
- `GET /v1/admin/reports`, `GET /v1/admin/reports/:id` — жалобы.
|
||||||
- `DELETE /v1/admin/reviews/:id` — удалить отзыв.
|
- `DELETE /v1/admin/reviews/:id` — удалить отзыв.
|
||||||
- `GET /v1/admin/banned-words`, `POST /v1/admin/banned-words` — запрещённые слова.
|
- `GET /v1/admin/banned-words`, `POST /v1/admin/banned-words` — запрещённые слова.
|
||||||
|
- `GET /v1/admin/automod/settings`, `PUT /v1/admin/automod/settings` — настройки автомодерации (чтение: admin/moderator; запись: admin/superadmin).
|
||||||
|
- `GET /v1/admin/automod/hits`, `PUT /v1/admin/automod/hits/:id` — очередь срабатываний (`status`: `approved` | `rejected`; фильтры `status`, `trigger`; доступ: admin/moderator).
|
||||||
- `GET /v1/admin/tickets/stats` — статистика тикетов: `total_tickets`, `open`, `in_progress`, `resolved`, `closed`, `total_errors`.
|
- `GET /v1/admin/tickets/stats` — статистика тикетов: `total_tickets`, `open`, `in_progress`, `resolved`, `closed`, `total_errors`.
|
||||||
- `GET /v1/admin/tickets` — список с фильтрами `status`, `source`, `assigned_to`, `q`; `GET /v1/admin/tickets/:id` — управление тикетами.
|
- `GET /v1/admin/tickets` — список с фильтрами `status`, `source`, `assigned_to`, `q`; `GET /v1/admin/tickets/:id` — управление тикетами.
|
||||||
- `GET /v1/admin/subscriptions`, `POST /v1/admin/subscriptions/:id` — подписки.
|
- `GET /v1/admin/subscriptions`, `POST /v1/admin/subscriptions/:id` — подписки.
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
| Роль | Идентификатор | Права |
|
| Роль | Идентификатор | Права |
|
||||||
|---------------|---------------|---------------------------------------------------------------------------------------------------------|
|
|---------------|---------------|---------------------------------------------------------------------------------------------------------|
|
||||||
| Суперадмин | `superadmin` | Полный доступ ко всем модулям, включая изменение ролей других админов, просмотр аудита, системные настройки, управление администраторами. |
|
| Суперадмин | `superadmin` | Полный доступ ко всем модулям, включая изменение ролей других админов, просмотр аудита, системные настройки, управление администраторами. |
|
||||||
| Администратор | `admin` | Управление пользователями, событиями, жалобами, отзывами, бан-словами, тикетами, подписками. Нет доступа к аудиту и управлению администраторами. |
|
| Администратор | `admin` | Управление пользователями, событиями, жалобами, отзывами, бан-словами, настройками автомодерации, тикетами, подписками. Нет доступа к аудиту и управлению администраторами. |
|
||||||
| Модератор | `moderator` | Работа с жалобами и отзывами. Остальные разделы недоступны. |
|
| Модератор | `moderator` | Работа с жалобами, отзывами и очередью автомодерации. Остальные разделы недоступны. |
|
||||||
| Поддержка | `support` | Работа с тикетами (баг-трекер). Остальные разделы недоступны. |
|
| Поддержка | `support` | Работа с тикетами (баг-трекер). Остальные разделы недоступны. |
|
||||||
|
|
||||||
Права проверяются на уровне фронтенда: пункты меню и маршруты (`RoleGuard` в `App.tsx`, конфиг `src/config/adminAccess.ts`) ограничены по роли из `GET /v1/admin/me`; при прямом URL без прав — страница 403.
|
Права проверяются на уровне фронтенда: пункты меню и маршруты (`RoleGuard` в `App.tsx`, конфиг `src/config/adminAccess.ts`) ограничены по роли из `GET /v1/admin/me`; при прямом URL без прав — страница 403.
|
||||||
@@ -116,6 +116,15 @@
|
|||||||
- Дата добавления отформатирована.
|
- Дата добавления отформатирована.
|
||||||
- Форма добавления нового слова и кнопка удаления с подтверждением.
|
- Форма добавления нового слова и кнопка удаления с подтверждением.
|
||||||
|
|
||||||
|
### 4.6.1. Автомодерация (настройки и очередь)
|
||||||
|
|
||||||
|
Эндпоинты: `GET/PUT /v1/admin/automod/settings`, `GET /v1/admin/automod/hits`, `PUT /v1/admin/automod/hits/:id`
|
||||||
|
|
||||||
|
Функциональность:
|
||||||
|
- Страница `/automod-settings` (роли `admin`, `superadmin`): `keyword_action`, `match_mode`, `report_threshold`.
|
||||||
|
- Inbox `/inbox/automod` (роли `admin`, `superadmin`, `moderator`): список hits, фильтр по статусу, Approve / Reject.
|
||||||
|
- WS-уведомление `automod_hit` открывает очередь автомодерации.
|
||||||
|
|
||||||
### 4.7. Тикеты (баг-трекер)
|
### 4.7. Тикеты (баг-трекер)
|
||||||
|
|
||||||
Эндпоинты: `GET /v1/admin/tickets` (фильтры `status`, `source`, `assigned_to`, `q`), `GET /v1/admin/tickets/stats`, `GET /v1/admin/tickets/:id`, `PUT /v1/admin/tickets/:id`, `DELETE /v1/admin/tickets/:id`; создание/авто-репорт: `POST /v1/tickets` (user/admin JWT).
|
Эндпоинты: `GET /v1/admin/tickets` (фильтры `status`, `source`, `assigned_to`, `q`), `GET /v1/admin/tickets/stats`, `GET /v1/admin/tickets/:id`, `PUT /v1/admin/tickets/:id`, `DELETE /v1/admin/tickets/:id`; создание/авто-репорт: `POST /v1/tickets` (user/admin JWT).
|
||||||
@@ -219,4 +228,4 @@
|
|||||||
- Контракт селекторов: `e2e/TESTIDS.md` (`data-testid` + a11y).
|
- Контракт селекторов: `e2e/TESTIDS.md` (`data-testid` + a11y).
|
||||||
- **Mock-suite** (`npm run test:e2e`): в CI после lint/build; route-моки `**/v1/admin/**`.
|
- **Mock-suite** (`npm run test:e2e`): в CI после lint/build; route-моки `**/v1/admin/**`.
|
||||||
- **IFT smoke** (`npm run test:e2e:ift`): login → shell → logout против IFT; учётки `SMOKE_ADMIN_*` / `ADMIN_SUPER_*` из `EventHubDevOps/ift/.env`; workflow `e2e-ift.yml` после Deploy IFT.
|
- **IFT smoke** (`npm run test:e2e:ift`): login → shell → logout против IFT; учётки `SMOKE_ADMIN_*` / `ADMIN_SUPER_*` из `EventHubDevOps/ift/.env`; workflow `e2e-ift.yml` после Deploy IFT.
|
||||||
- Coverage (mock): auth/roles, shell, inbox reports/tickets, reports/reviews CRUD-пути, explore users/calendars/events/subscriptions, banned-words, admins/audit/monitoring/profile, i18n.
|
- Coverage (mock): auth/roles, shell, inbox reports/tickets/automod, reports/reviews CRUD-пути, explore users/calendars/events/subscriptions, banned-words, automod-settings, admins/audit/monitoring/profile, i18n.
|
||||||
Reference in New Issue
Block a user