Безопасность, качество и эксплуатация¶
Модель безопасности и доступа¶
Мультитенантность и контроль доступа¶
Платформа использует soft multi-tenancy model на базе root organization unit pattern.
Пользователь может состоять в нескольких организациях и иметь разные роли в зависимости от текущего организационного контекста. Проверки доступа применяются на уровне сервисов, репозиториев, API и UI.
Публичная витрина¶
Организации могут публиковать выбранные данные через публичные страницы, публичные карточки растений, публичные списки, QR-label targets и глобальную карту.
Публичный слой использует отдельные DTO и visibility rules, чтобы не раскрывать внутренние поля и данные тенанта.
Двойной контур RBAC¶
В системе предусмотрена одна сущность User и две модели доступа по ролям: организационные роли и платформенные роли. Один пользователь может быть руководителем нескольких организаций и при этом он будет модератором платформы, другой пользователь выполняет роль инженера поддержки, поэтому должен иметь ограниченный доступ к любому тенанту и объекту, третий пользователь является стейкхолдером и ему доступны только дашборд-модули. Все три пользователя при этом авторизуются через единый флоу авторизации и аутентификации. Подробности механизма не раскрываются.
Нефункциональные требования¶
Ключевые атрибуты качества¶
| Атрибут | Сценарий | Подход |
|---|---|---|
| Security | Пользователь организации A не должен получить данные организации B | tenant-scoped queries, RBAC, public DTO, integration tests |
| Reliability | Зависший импорт не должен блокировать систему | background jobs, stale detection, retry/manual restart |
| Maintainability | Доменная модель активно меняется на MVP-стадии | modular monolith, package boundaries, DTO/service layers |
| Performance | Поиск по справочнику таксонов должен оставаться приемлемым при росте каталога | indexes, normalized names, pagination, fuzzy matching strategy |
| Operability | Сбой VPS не должен приводить к полной потере данных | backups, restore plan, migration path |
Режимы отказа¶
| Риск | Последствие | Митигирующая мера |
|---|---|---|
| ошибка tenant filtering | утечка данных | тесты, AccessControlService, scoped queries |
| падение VPS | недоступность сервиса | backup, restore plan, migration path |
| потеря MinIO volume | потеря фото/импортов | object storage backup |
| зависший import job | блокировка импорта | job lifecycle, stale detection |
| public DTO leakage | раскрытие внутренних данных | отдельные DTO, visibility rules |
Оценка масштаба и стоимости¶
Основные драйверы нагрузки¶
- количество организаций;
- количество экземпляров растений;
- количество фото на растение;
- размер Excel-импортов;
- частота Smart Import;
- объём публичного трафика на карты, QR-страницы и изображения;
- объём справочника таксонов.
Основные драйверы стоимости¶
- VPS / compute;
- PostgreSQL/PostGIS storage;
- object storage для фото и импортов;
- резервные копии;
- LLM calls для Smart Import;
- трафик публичных страниц и изображений;
- мониторинг и хранение логов.
Масштабные уровни¶
См. Дорожную карту