Перейти к содержимому

Данные и доступ

Каждая бизнес-запись содержит family_id. PostgreSQL RLS проверяет активное членство через auth.uid(). Роль берётся из таблицы членства, а не из изменяемых метаданных пользователя. Пользователь вне семьи не видит её записи.

Родитель и администратор управляют стратегией, школьными оценками, требованиями университетов и доступом. Ученик и преподаватель работают с действиями и результатами: права у этих двух ролей одинаковые, различие в том, что видно, кто именно внёс запись. Секретный ключ доступен только серверным операциям администрирования; обычные операции используют RLS.

Неизвестные баллы и даты хранятся как null. В интерфейсе они не превращаются в нулевые результаты. Исходная школьная оценка и её документ сохраняются отдельно от исправленной оценки. Обязательные условия gate определяют его прогресс.

У доказательства хранится происхождение: тип, результат, организация, кто может подтвердить, личный вклад Никиты и отметка проверки с автором и временем. База не принимает половинчатую проверку: «проверено» без автора и времени сохранить нельзя.

Файлы хранятся в закрытых bucket. Путь начинается с UUID семьи. Оригиналы нельзя перезаписать обычным пользовательским запросом. Завершённый месячный обзор сохраняет снимок направлений и защищён от изменения.

Миграции находятся в supabase/migrations. Начальные стратегические данные создаются scripts/generate-seed.py; повторная загрузка не заменяет существующие записи с тем же идентификатором. Аутентификационные пользователи не входят в seed.