add admin control center ui and bot commands
This commit is contained in:
155
ADMIN.md
Normal file
155
ADMIN.md
Normal file
@@ -0,0 +1,155 @@
|
||||
# CarPass Admin Control Center
|
||||
|
||||
Admin Control Center дает администраторам закрытого пилота безопасный доступ к событиям сервиса, модерации СТО, просмотру данных и экспорту без прямого SQL.
|
||||
|
||||
## Доступ
|
||||
|
||||
Админка открывается в Mini App по `/admin.html` или командой бота `/admin`.
|
||||
|
||||
Роли:
|
||||
|
||||
- `super_admin`: полный доступ к пользователям, СТО, заявкам, заказ-нарядам, расходам, audit, export и системным настройкам.
|
||||
- `admin`: пользователи, СТО, модерация, заказ-наряды, базовая аналитика и экспорт без секретов.
|
||||
- `moderator`: заявки СТО, отзывы, блокировки и комментарии модерации.
|
||||
- `support`: поиск пользователя, авто, история действий и помощь без расширенных финансовых агрегатов.
|
||||
- `analyst`: агрегированная аналитика и обезличенные выгрузки без персональных данных.
|
||||
|
||||
Все чувствительные admin actions пишутся в `AuditLog`.
|
||||
|
||||
## Уведомления
|
||||
|
||||
Система создает `AdminNotification` в БД и best-effort отправляет Telegram-сообщение администраторам. Ошибка Telegram не ломает бизнес-flow.
|
||||
|
||||
Поддержанные события:
|
||||
|
||||
- новый пользователь;
|
||||
- первое авто пользователя;
|
||||
- новая заявка СТО;
|
||||
- изменение статуса заявки СТО;
|
||||
- одобрение, блокировка и разблокировка СТО;
|
||||
- security/system события через общий admin notification service.
|
||||
|
||||
Idempotency key защищает от дублей.
|
||||
|
||||
Env:
|
||||
|
||||
```env
|
||||
ADMIN_TELEGRAM_IDS=123,456
|
||||
ADMIN_NOTIFICATION_CHAT_ID=
|
||||
ADMIN_NOTIFY_NEW_USERS=true
|
||||
ADMIN_NOTIFY_STO_APPLICATIONS=true
|
||||
ADMIN_NOTIFY_SECURITY_EVENTS=true
|
||||
ADMIN_NOTIFY_SYSTEM_ERRORS=true
|
||||
```
|
||||
|
||||
## Admin API
|
||||
|
||||
Dashboard:
|
||||
|
||||
- `GET /api/admin/dashboard`
|
||||
|
||||
Notifications:
|
||||
|
||||
- `GET /api/admin/notifications`
|
||||
- `POST /api/admin/notifications/{id}/read`
|
||||
- `POST /api/admin/notifications/read-all`
|
||||
- `POST /api/admin/notifications/{id}/dismiss`
|
||||
|
||||
Data Explorer:
|
||||
|
||||
- `GET /api/admin/data/sources`
|
||||
- `POST /api/admin/data/query`
|
||||
- `POST /api/admin/data/export`
|
||||
|
||||
Users:
|
||||
|
||||
- `GET /api/admin/users`
|
||||
- `GET /api/admin/users/{id}`
|
||||
- `GET /api/admin/users/{id}/activity`
|
||||
- `POST /api/admin/users/{id}/note`
|
||||
- `POST /api/admin/users/{id}/block`
|
||||
- `POST /api/admin/users/{id}/unblock`
|
||||
|
||||
СТО:
|
||||
|
||||
- `GET /api/admin/sto`
|
||||
- `GET /api/admin/sto/{id}`
|
||||
- `GET /api/admin/sto-applications`
|
||||
- `POST /api/admin/sto-applications/{id}/approve`
|
||||
- `POST /api/admin/sto-applications/{id}/reject`
|
||||
- `POST /api/admin/sto-applications/{id}/request-changes`
|
||||
- `POST /api/admin/sto/{id}/suspend`
|
||||
- `POST /api/admin/sto/{id}/unsuspend`
|
||||
|
||||
Audit and exports:
|
||||
|
||||
- `GET /api/admin/audit-log`
|
||||
- `GET /api/admin/exports`
|
||||
- `GET /api/admin/exports/{id}`
|
||||
|
||||
## Data Explorer
|
||||
|
||||
Data Explorer работает только по whitelist источников и полей. Произвольный SQL из UI не принимается.
|
||||
|
||||
Источники:
|
||||
|
||||
- `users`
|
||||
- `vehicles`
|
||||
- `fuel_entries`
|
||||
- `service_entries`
|
||||
- `expense_entries`
|
||||
- `sto_profiles`
|
||||
- `sto_applications`
|
||||
- `sto_employees`
|
||||
- `vehicle_sto_links`
|
||||
- `appointments`
|
||||
- `work_orders`
|
||||
- `work_order_items`
|
||||
- `work_order_products`
|
||||
- `reviews`
|
||||
- `notifications`
|
||||
- `admin_notifications`
|
||||
- `audit_logs`
|
||||
- `imports_exports`
|
||||
|
||||
Поддержаны фильтры по дате, статусу, пользователю, Telegram ID, авто, СТО, городу, роли, категории, сумме, ошибкам и текстовому поиску. Каждый запрос ограничен `limit` до 500 строк и пишет audit log.
|
||||
|
||||
## Privacy
|
||||
|
||||
По умолчанию маскируются Telegram ID, VIN, госномер, телефон и регистрационные данные СТО.
|
||||
|
||||
Полный просмотр sensitive data:
|
||||
|
||||
- доступен только `admin` и `super_admin`;
|
||||
- требует `reason`;
|
||||
- пишет audit log;
|
||||
- не раскрывает bot token, env, internal token, secret fields.
|
||||
|
||||
`analyst` видит только обезличенные или замаскированные персональные данные.
|
||||
|
||||
## Модерация СТО
|
||||
|
||||
Очередь заявок доступна в `/admin.html?section=sto-applications`.
|
||||
|
||||
Действия:
|
||||
|
||||
- approve;
|
||||
- reject with reason;
|
||||
- request changes with reason;
|
||||
- suspend;
|
||||
- unsuspend.
|
||||
|
||||
При изменении статуса создаются audit log, admin notification и уведомление владельцу СТО.
|
||||
|
||||
## Bot Commands
|
||||
|
||||
Админские команды бота:
|
||||
|
||||
- `/admin`
|
||||
- `/admin_stats`
|
||||
- `/admin_users`
|
||||
- `/admin_sto`
|
||||
- `/admin_pending_sto`
|
||||
- `/admin_alerts`
|
||||
|
||||
API дополнительно проверяет роль пользователя, поэтому команда не дает доступа без admin-role в БД.
|
||||
Reference in New Issue
Block a user