2.9 KiB
2.9 KiB
Руководство по миграции: Упрощение системы ролей
Изменения
Мы удаляем отдельную таблицу roles и переносим роли прямо в таблицу users.
Изменения в схеме:
-
Таблица
users:- Переименование колонки
role_name→role - Удаление внешнего ключа на таблицу
roles - Добавление значения по умолчанию
'manager'
- Переименование колонки
-
Таблица
roles:- Удаление всей таблицы (больше не нужна)
Шаги миграции
1. Создать миграцию через Drizzle Kit
cd server
bun run db:generate
2. Применить миграцию
bun run db:migrate
3. Ручные SQL-команды (если нужно)
Если автоматическая миграция не сработает, выполните следующие команды вручную:
-- 1. Удалить внешний ключ из таблицы users
ALTER TABLE users DROP CONSTRAINT IF EXISTS users_role_name_roles_name_fk;
-- 2. Переименовать колонку role_name в role
ALTER TABLE users RENAME COLUMN role_name TO role;
-- 3. Добавить значение по умолчанию
ALTER TABLE users ALTER COLUMN role SET DEFAULT 'manager';
-- 4. Удалить таблицу roles
DROP TABLE IF EXISTS roles;
Откат миграции (если нужно)
Если что-то пошло не так, можно откатить изменения:
-- 1. Создать таблицу roles заново
CREATE TABLE roles (
name TEXT PRIMARY KEY,
title VARCHAR(100) NOT NULL
);
-- 2. Заполнить таблицу roles
INSERT INTO roles (name, title) VALUES
('admin', 'Администратор'),
('director', 'Директор'),
('manager', 'Менеджер');
-- 3. Переименовать колонку обратно
ALTER TABLE users RENAME COLUMN role TO role_name;
-- 4. Удалить значение по умолчанию
ALTER TABLE users ALTER COLUMN role_name DROP DEFAULT;
-- 5. Добавить внешний ключ
ALTER TABLE users ADD CONSTRAINT users_role_name_roles_name_fk
FOREIGN KEY (role_name) REFERENCES roles(name);
Проверка
После миграции проверьте:
- Все существующие пользователи сохранили свои роли
- API
/auth/meвозвращает корректный формат:{ "user": { "id": "...", "email": "...", "fullName": "...", "role": "manager", "createdAt": "..." } } - Регистрация и логин работают корректно
- Проверка прав доступа работает (middleware)