Reactive EngineeringRE Docs
Архитектура

Безопасность и данные

Аутентификация, авторизация, секреты и правила хранения.

Аутентификация и авторизация

Better Auth управляет password credentials, reset tokens и сессиями. Публичная регистрация отключена. Бизнес-доступ определяется отдельными таблицами Role, Permission, UserRole и RolePermission.

UI не является границей доступа

Скрытый пункт меню или disabled-кнопка только улучшают интерфейс. Каждая Server Action и защищённая страница самостоятельно проверяет permission.

Шифрование credentials

Apple .p8, Google service-account JSON и bearer token n8n шифруются AES-256-GCM с уникальным IV. Master key приходит только из FEEDBACK_CREDENTIALS_ENCRYPTION_KEY и не сохраняется в PostgreSQL.

Нельзя передавать расшифрованные секреты в Client Components, browser props, логи или Audit Log. Settings показывает только безопасные поля и факт наличия credential.

Основные группы данных

ОбластьМоделиСвойства
App FeedbackFeedbackIntegration, AppReview, FeedbackReply, FeedbackSyncRunИдемпотентный upsert, история попыток ответа
QR FeedbackFeedbackEntity, ManagedQrCode, QrFeedback, QrFeedbackSettingImmutable submissions, snapshot entity, soft delete
ДоступUser, Role, Permission, UserRole, RolePermissionМного ролей на пользователя
АудитAuditEventДействие, actor, target и безопасные details

DATABASE_SCHEMA изолирует приложение внутри общей PostgreSQL database. Runtime использует DATABASE_URL; для DDL рекомендуется отдельный MIGRATION_DATABASE_URL.

Публичная QR-форма

  • принимает JSON не более 16 KiB;
  • rating — целое число 1–10;
  • comment необязателен, до 2000 символов;
  • source identity определяется по X-Real-IP, затем X-Forwarded-For;
  • concurrency контролируется PostgreSQL advisory locks;
  • удаление из inbox — soft delete с audit-событием.

Логи и аудит

Безопасно логировать operation name, request ID, status/code и агрегированные счётчики. Нельзя логировать provider tokens, полный credential payload, QR-комментарии, полные списки email-получателей или непроверенное содержимое исключений.

Миграции

Каждое изменение prisma/schema.prisma поставляется вместе с проверенной migration. В production применяется только:

pnpm db:deploy

Не используйте prisma db push или prisma migrate dev против production.

On this page