Данные и доступ
Каждая бизнес-запись содержит family_id. PostgreSQL RLS проверяет активное
членство через auth.uid(). Роль берётся из таблицы членства, а не из изменяемых
метаданных пользователя. Пользователь вне семьи не видит её записи.
Родитель и администратор управляют стратегией, школьными оценками, требованиями университетов и доступом. Ученик и преподаватель работают с действиями и результатами: права у этих двух ролей одинаковые, различие в том, что видно, кто именно внёс запись. Секретный ключ доступен только серверным операциям администрирования; обычные операции используют RLS.
Неизвестные баллы и даты хранятся как null. В интерфейсе они не превращаются в
нулевые результаты. Исходная школьная оценка и её документ сохраняются отдельно
от исправленной оценки. Обязательные условия gate определяют его прогресс.
У доказательства хранится происхождение: тип, результат, организация, кто может подтвердить, личный вклад Никиты и отметка проверки с автором и временем. База не принимает половинчатую проверку: «проверено» без автора и времени сохранить нельзя.
Файлы хранятся в закрытых bucket. Путь начинается с UUID семьи. Оригиналы нельзя перезаписать обычным пользовательским запросом. Завершённый месячный обзор сохраняет снимок направлений и защищён от изменения.
Миграции находятся в supabase/migrations. Начальные стратегические данные
создаются scripts/generate-seed.py; повторная загрузка не заменяет существующие
записи с тем же идентификатором. Аутентификационные пользователи не входят в seed.