32 lines
2.3 KiB
MySQL
32 lines
2.3 KiB
MySQL
|
|
-- 0010_user_confirmation — подтверждение аккаунта после регистрации.
|
|||
|
|
--
|
|||
|
|
-- Саморегистрация (POST /auth/register) создаёт неподтверждённого
|
|||
|
|
-- клиента: войти нельзя (Login → 403 account not confirmed), пока
|
|||
|
|
-- подтверждение не выставит админ (POST /users/:id/confirm).
|
|||
|
|
-- До этой миграции SMTP и подтверждения не было вовсе — поэтому
|
|||
|
|
-- бэкфилл помечает существующих пользователей подтверждёнными.
|
|||
|
|
--
|
|||
|
|
-- Правила, проверяемые в SQL, а не в хендлерах:
|
|||
|
|
-- * подтверждает админ — любой неподтверждённый аккаунт; клиент —
|
|||
|
|
-- только созданного им мастера (ConfirmUser: обе ветки в WHERE,
|
|||
|
|
-- чужой мастер и несуществующий id неразличимы — 404);
|
|||
|
|
-- * повторное подтверждение отсекает WHERE confirmed_at IS NULL
|
|||
|
|
-- (иначе 409 already confirmed);
|
|||
|
|
-- * создание админом = подтверждение сразу («создатель и есть
|
|||
|
|
-- подтверждающий») — в том же INSERT, что и создание строки;
|
|||
|
|
-- * созданные админом аккаунты работают без дополнительных кликов.
|
|||
|
|
--
|
|||
|
|
-- confirmed_by/created_by — ON DELETE SET NULL: удалённый создатель
|
|||
|
|
-- не должен ломать каскадное удаление профилей.
|
|||
|
|
--
|
|||
|
|
-- Применённый файл не редактировать (checksum в schema_migrations).
|
|||
|
|
|
|||
|
|
ALTER TABLE profiles
|
|||
|
|
ADD COLUMN confirmed_at timestamptz, -- NULL — ждёт подтверждения
|
|||
|
|
ADD COLUMN confirmed_by uuid REFERENCES profiles(id) ON DELETE SET NULL,
|
|||
|
|
ADD COLUMN created_by uuid REFERENCES profiles(id) ON DELETE SET NULL;
|
|||
|
|
|
|||
|
|
-- Бэкфилл: подтверждения раньше не существовало, все существующие
|
|||
|
|
-- аккаунты обязаны входить как прежде.
|
|||
|
|
UPDATE profiles SET confirmed_at = now() WHERE confirmed_at IS NULL;
|