Приватность и 152-ФЗ

Твои данные — только твои: изоляция и сроки хранения

Изоляция на уровне базы: даже если код случайно забудет фильтр, база не отдаст чужое. Хранится ровно столько, сколько нужно для дела, — по уровням, а не единым сроком. Удаление аккаунта стирает всё одной кнопкой.

Ваши маршруты, заработок, адреса клиентов, каждая точка GPS за смену — это чувствительная картина вашей жизни и работы. Доверие к приложению держится не на обещании «мы бережём ваши данные», а на том, как это устроено технически: чтобы чужое было недоступно даже при ошибке в коде.

Приватность здесь — не строчка в соглашении, а конструкция базы данных. Разберём, как именно данные остаются вашими.

Что делает

Данные изолированы на уровне самой базы (PostgreSQL Row Level Security). Каждый пользователь видит и меняет только свои строки. Идентификатор пользователя берётся из сессионной переменной, которую сервер выставляет на каждое соединение, — и база пропускает запрос только к строкам с этим идентификатором.

Главная защита Даже если запрос в коде однажды случайно забудет фильтр «только мои данные» — база всё равно не отдаст чужое. Правило изоляции живёт не в коде приложения, где возможна ошибка, а в самой базе, ниже уровнем. Это страховка от человеческой оплошности, а не надежда на её отсутствие.

Что изолировано, а что нет

Под изоляцией — около 22 таблиц: настройки, смены, визиты, расходы, GPS, метрики, личные нормы, кэш адресов. Всё, что относится лично к вам.

А вот публичные данные карты — зоны платной парковки и улицы OSM — намеренно не изолированы. Они общие и ничьи: платная зона в центре города одинакова для всех, привязывать её к пользователю бессмысленно.

Изоляция включена в режиме FORCE — её не обойти даже владельцу таблицы. А связи между таблицами настроены на каскадное удаление: убираешь пользователя — уходят и все связанные с ним записи, без осиротевших хвостов.

Что за этим стоит

Сроки хранения — по уровням

Данные хранятся не «вечно» и не единым сроком, а по уровням — каждый тип живёт ровно столько, сколько реально нужен:

  • Сырые точки GPS — 14 дней;
  • Телеметрия вождения — 56 дней;
  • Метрики дня — 56 дней;
  • Очередь синхронизации — 30 дней.

Дальше эти данные автоматически удаляются — они своё отработали.

Что не удаляется — и почему Деньги-отчёты (daily_stats) и личная норма (user_baselines) не стираются по сроку. Это компактная строка в день — без неё пропала бы история заработка и настройка приложения под вас. Хранить её дёшево, а потеря была бы невосполнимой: обучалась модель месяцами, а исчезла бы за ночь.

Ещё одно правило: активную смену не трогают ни при каком сроке. Пока вы в смене, её данные защищены от любой уборки — чистка работает только с завершённым и устаревшим.

Удаление аккаунта

Если вы решили уйти совсем — одна кнопка каскадно стирает вообще все ваши данные: настройки, смены, визиты, 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+ · установка из файла · бесплатно