Твои данные — только твои: изоляция и сроки хранения
Изоляция на уровне базы: даже если код случайно забудет фильтр, база не отдаст чужое. Хранится ровно столько, сколько нужно для дела, — по уровням, а не единым сроком. Удаление аккаунта стирает всё одной кнопкой.
Ваши маршруты, заработок, адреса клиентов, каждая точка GPS за смену — это чувствительная картина вашей жизни и работы. Доверие к приложению держится не на обещании «мы бережём ваши данные», а на том, как это устроено технически: чтобы чужое было недоступно даже при ошибке в коде.
Приватность здесь — не строчка в соглашении, а конструкция базы данных. Разберём, как именно данные остаются вашими.
Что делает
Данные изолированы на уровне самой базы (PostgreSQL Row Level Security). Каждый пользователь видит и меняет только свои строки. Идентификатор пользователя берётся из сессионной переменной, которую сервер выставляет на каждое соединение, — и база пропускает запрос только к строкам с этим идентификатором.
Что изолировано, а что нет
Под изоляцией — около 22 таблиц: настройки, смены, визиты, расходы, GPS, метрики, личные нормы, кэш адресов. Всё, что относится лично к вам.
А вот публичные данные карты — зоны платной парковки и улицы OSM — намеренно не изолированы. Они общие и ничьи: платная зона в центре города одинакова для всех, привязывать её к пользователю бессмысленно.
Изоляция включена в режиме FORCE — её не обойти даже владельцу таблицы. А связи между таблицами настроены на каскадное удаление: убираешь пользователя — уходят и все связанные с ним записи, без осиротевших хвостов.
Что за этим стоит
Сроки хранения — по уровням
Данные хранятся не «вечно» и не единым сроком, а по уровням — каждый тип живёт ровно столько, сколько реально нужен:
- Сырые точки GPS — 14 дней;
- Телеметрия вождения — 56 дней;
- Метрики дня — 56 дней;
- Очередь синхронизации — 30 дней.
Дальше эти данные автоматически удаляются — они своё отработали.
Ещё одно правило: активную смену не трогают ни при каком сроке. Пока вы в смене, её данные защищены от любой уборки — чистка работает только с завершённым и устаревшим.
Удаление аккаунта
Если вы решили уйти совсем — одна кнопка каскадно стирает вообще все ваши данные: настройки, смены, визиты, GPS, метрики, нормы. Ничего не остаётся «на всякий случай». Ушли — значит ушли.
Почему это важно
Всё вместе это и есть минимизация данных по 152-ФЗ на практике: хранить ровно столько, сколько нужно для дела, и ни строкой больше. Не «мы обещаем быть аккуратными», а конструкция, в которой аккуратность встроена: чужое недоступно на уровне базы, лишнее удаляется само по срокам, нужное сохраняется, а уход стирает всё.
Для человека, чья работа — это ежедневный поток адресов, маршрутов и заработка, такая архитектура означает простое: приложением можно пользоваться, не оглядываясь на то, где осядут ваши данные. Они ваши, они под замком базы, и они не переживут вас в системе.
Как устроена приватность
- Изоляция на уровне базы (PostgreSQL Row Level Security): каждый видит только свои строки; идентификатор берётся из сессионной переменной на каждом соединении.
- Под изоляцией — около 22 таблиц (ISOLATED_TABLES). Публичные данные карты (зоны парковки, улицы OSM) намеренно не изолированы.
- Режим FORCE — изоляцию не обойти даже владельцу таблицы; связи настроены на каскадное удаление.
- Сроки хранения по уровням: GPS — 14 дней, телеметрия — 56 дней, метрики дня — 56 дней, очередь синхронизации — 30 дней.
- Деньги-отчёты (daily_stats) и личная норма (user_baselines) не удаляются; активную смену не трогают ни при каком сроке.
- Реализовано в db.py (_ensure_isolation, ISOLATED_TABLES), database.py (set_user), pool.py, cleanup_service.py (cleanup), auth_service.py (delete_account).
Проверь любой заказ за секунду
Установи приложение и посмотри честный вердикт по своему следующему адресу — стоит ехать или нет.
Скачать для Android Android 8+ · установка из файла · бесплатно