Сделать доработки запрошенные фронтом #2
Notifications
Due Date
No due date set.
Depends on
#3 Перенести все админские эндпоинты на порт 8445 и добавить отдельную авторизацию для админов
EventHub/EventHubBack
#4 Добавить версионность в API админки
EventHub/EventHubBack
#5 Добавить недостающие админские эндпоинты
EventHub/EventHubBack
#6 Ролевая модель и аудит
EventHub/EventHubBack
#7 Статистика для дашборда
EventHub/EventHubBack
#8 Улучшение безопасности и обработки ошибок
EventHub/EventHubBack
#9 Переделать связь нод в кластере на автоматическое обнаружение
EventHub/EventHubBack
Reference: EventHub/EventHubBack#2
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Задачи бэкенда EventHubBack для поддержки Admin UI (актуально)
Критические исправления (MVP)
Перенести все админские эндпоинты на порт 8445 и добавить отдельную авторизацию для админов
roleс дополнительной проверкойaud(audience). Пользовательские токены не должны давать доступ к админским ресурсам./admin/...(например,https://admin.eventhub.local:8445/admin/users).Это устранит дублирование между портами 8445 и 8080 и повысит безопасность.
Добавить версионность в API админки
Привести все админские эндпоинты к единому версионному префиксу
/v1/admin/...на порту 8445 (аналогично пользовательскому API).Пример:
GET /v1/admin/users,PUT /v1/admin/events/:id/freeze.Поддержка обратной совместимости на период миграции (редирект со старых путей или временный прокси).
Добавить недостающие админские эндпоинты
Сейчас из всех ресурсов Admin UI работает только
/admin/users(порт 8445). Требуется реализовать CRUD (хотя бы GET list) для:GET /v1/admin/events(список событий с фильтрацией)GET /v1/admin/calendarsGET /v1/admin/tickets(уже частично работает на порту 8080, перенести на 8445)GET /v1/admin/reportsGET /v1/admin/reviewsGET /v1/admin/banned-wordsПриоритет: сначала
eventsиcalendars, затем остальные.Ролевая модель и аудит
Автосоздание суперадмина при первой инициализации базы
При старте приложения проверять, есть ли в таблице
usersхотя бы одна запись. Если пользователей нет — автоматически создавать учётную запись с рольюsuperadmin, используя параметры из.env:ADMIN_EMAILADMIN_PASSWORDADMIN_USERNAME(по умолчаниюadmin).Никогда не перезаписывать существующего пользователя.
Добавить миграцию для поля
roleв таблицеusersСейчас роль хранится как
<<"admin">>. Нужно зарезервировать значенияsuperadmin,moderator,supportи обновить существующих пользователей.Реализовать middleware проверки ролей
В каждом админском обработчике проверять JWT и извлекать роль. Возвращать
403при недостаточности прав (например,supportне может менять роли).Эндпоинт
GET /v1/admin/meВозвращает
{ id, email, role, permissions }для текущего администратора. Нужен для динамического скрытия элементов в UI.Управление ролями (только для
superadmin)GET /v1/admin/admins– список всех админов с ролями.PUT /v1/admin/admins/:id– изменение роли.POST /v1/admin/admins– приглашение нового админа (с отправкой email).Аудит действий администраторов
admin_audit(admin_id, email, role, action, entity_type, entity_id, timestamp, ip, reason).GET /v1/admin/auditс фильтрами (по дате, админу, действию) – доступен толькоsuperadmin.Статистика для дашборда
GET /v1/admin/statsВозвращает агрегированные данные в зависимости от роли:
superadmin: общее количество пользователей, событий, жалоб, багов; график регистраций/событий по дням.moderator: свои обработанные жалобы/события (количество, статусы).support: количество открытых багов и жалоб, назначенных на текущего.Улучшение безопасности и обработки ошибок
При блокировке/отклонении принимать и сохранять
reasonВо все методы, изменяющие статус (блокировка пользователя, отклонение события, жалобы), добавить обязательное поле
reasonи сохранять в БД.CORS-заголовки для админского сервера
Убедиться, что порт 8445 отдаёт
Access-Control-Expose-Headers: Content-Range. Если нужно, добавить.Валидация входных данных
Особенно для создания/редактирования сущностей (email, обязательные поля).
Инициализация и инфраструктура
Убрать статический
JOIN_NODES. Вместо него реализовать механизм автоматического поиска узлов через DNS-лукап или библиотекуlibcluster(стратегияCluster.Strategy.DNSPoll), используя общее DNS-имя сервиса (например,eventhub-node). Ноды должны самостоятельно находить друг друга и формировать кластер без ручного указания имён.