Описать понятный аудит оператора: changes и локализация
Контракт ленты действий дополнен changes и tenantName; в инструкции пользователя раздел оператора обновлён (Пользователи, читаемые изменения).
@@ -151,8 +151,13 @@
|
||||
"actorType": "tenant",
|
||||
"actorId": "1f2e3d4c-5b6a-7980-1234-56789abcdef0",
|
||||
"tenantId": "aabbccdd-eeff-0011-2233-445566778899",
|
||||
"tenantName": "ООО «Ромашка»",
|
||||
"ip": "203.0.113.7",
|
||||
"detailJson": "{\"cardId\":\"c_1a2b3c4d5e6f\",\"to\":\"planned\"}",
|
||||
"changes": [
|
||||
{ "field": "cardId", "to": "c_1a2b3c4d5e6f" },
|
||||
{ "field": "to", "to": "planned" }
|
||||
],
|
||||
"detailJson": "{\"changes\":[{\"field\":\"cardId\",\"to\":\"c_1a2b3c4d5e6f\"},{\"field\":\"to\",\"to\":\"planned\"}]}",
|
||||
"at": "2026-09-10T15:22:46.123Z",
|
||||
"id": 1042
|
||||
}
|
||||
@@ -164,7 +169,18 @@
|
||||
```
|
||||
|
||||
- `items` — новые сверху (`at` DESC). `total` — полное число по фильтру (без `limit`/`offset`).
|
||||
- `detailJson` — **строка** JSON деталей события (без секретов), может быть `null`.
|
||||
- `tenantName` — имя пользователя события (join с реестром); `null`, если пользователя нет/не разрешено.
|
||||
- `changes` — человекочитаемые изменения параметров события (см. «Детали события»); `[]`, если деталей нет.
|
||||
- `detailJson` — **строка** сырого JSON деталей события (без секретов) для спойлера; может быть `null`.
|
||||
|
||||
### Детали события (`changes`)
|
||||
|
||||
Детали события хранятся как JSON вида `{ "changes": [ { "field": "<код>", "from": "<было>", "to": "<стало>" } ] }`,
|
||||
где `field` — стабильный код параметра, `from` — предыдущее значение (`null` — параметр задан впервые),
|
||||
`to` — новое. Сериализация деталей — `AuditService.ToDetailJson`, форма изменения — `AuditDetails.Set`/
|
||||
`AuditDetails.Change`. Ядро отдаёт `changes` как есть; человекочитаемые названия событий, акторов, параметров
|
||||
и значений — в ресурсах интерфейса (`ru.js`: `operator.event`/`operator.actor`/`operator.field`/`operator.value`).
|
||||
Прежние записи плоского формата (`{ "login": "..." }`, пары `old*`/`new*`) читаются обратно совместимо.
|
||||
|
||||
**Коды**: `200`, `401`.
|
||||
|
||||
|
||||
@@ -247,7 +247,7 @@
|
||||
|
||||
Разделы консоли:
|
||||
|
||||
- **Тенанты** — список рабочих пространств с числом пользователей и статусом. Здесь можно создать
|
||||
- **Пользователи** — список рабочих пространств с числом учётных записей и статусом. Здесь можно создать
|
||||
пространство (при необходимости сразу с владельцем — ему выдаётся одноразовый пароль),
|
||||
**приостановить** и **возобновить** доступ, а также **войти от имени пользователя** пространства
|
||||
(impersonation) — удобно для поддержки; завершается обычным выходом.
|
||||
@@ -257,6 +257,8 @@
|
||||
и период. После смены предупреждения о расходе сбрасываются.
|
||||
- **Аудит** — лента действий (входы, выходы, приглашения, действия пользователей, изменения по
|
||||
пространствам и лимитам) с фильтрами по типу события, актору, пространству и периоду; есть пагинация.
|
||||
Названия действий и параметры показываются понятным текстом, изменение — как «было → стало»;
|
||||
сырой JSON доступен под спойлером.
|
||||
- **Аналитика** — обзор за период (число пространств, расход токенов, входы/выходы/неудачные входы),
|
||||
расход токенов с группировкой по дням/пространствам/провайдерам/моделям и лента действий.
|
||||
- **Состояние системы** — доступность ядра, базы данных и сервисов (Telegram, ИИ, ML).
|
||||
|
||||
Reference in New Issue
Block a user