Нужно при создании роли создавать данные в подчиненных таблицах, как это сделать?

Для создания данных в подчиненных таблицах при создании роли в Node.js, вам необходимо использовать ORM (Object-Relational Mapping) для работы с базой данных. ORM позволяет взаимодействовать с базой данных, используя объектно-ориентированный подход.

В качестве примера я рассмотрю использование Sequelize – одного из самых популярных ORM для Node.js, который поддерживает работу с различными базами данных, такими как MySQL, PostgreSQL, SQLite и др.

Предположим, у вас есть база данных с тремя таблицами: "Roles", "Permissions"и"RolePermissions". Таблица "RolePermissions" является связующей таблицей между "Roles" и "Permissions" и содержит внешние ключи к обеим таблицам.

Вначале, вам потребуется настроить соединение с базой данных и определить модели для каждой таблицы. Вот пример для Sequelize с использованием MySQL:

const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',
});

// Определяем модели для каждой таблицы
const Role = sequelize.define('Role', {
  name: {
    type: Sequelize.STRING,
    allowNull: false,
  },
});

const Permission = sequelize.define('Permission', {
  name: {
    type: Sequelize.STRING,
    allowNull: false,
  },
});

const RolePermission = sequelize.define('RolePermission', {
  roleId: {
    type: Sequelize.INTEGER,
    references: {
      model: Role,
      key: 'id',
    },
  },
  permissionId: {
    type: Sequelize.INTEGER,
    references: {
      model: Permission,
      key: 'id',
    },
  },
});

// Описываем связи между моделями
Role.belongsToMany(Permission, { through: RolePermission });
Permission.belongsToMany(Role, { through: RolePermission });

// Синхронизируем модели с базой данных
sequelize.sync();

Теперь, при создании новой роли, вы можете также создать соответствующие записи в таблице RolePermissions. Вот пример метода для создания роли и привязки разрешений:

async function createRole(name, permissionIds) {
  try {
    const role = await Role.create({ name });

    const permissions = await Permission.findAll({
      where: { id: permissionIds },
    });

    await role.setPermissions(permissions);

    console.log('Роль и разрешения успешно созданы');
  } catch (error) {
    console.error('Произошла ошибка при создании роли:', error);
  }
}

// Пример использования метода createRole
createRole('Администратор', [1, 2, 3]);

В этом примере метод createRole принимает имя роли и список идентификаторов разрешений. Он сначала создает новую роль с помощью метода Role.create, затем ищет соответствующие разрешения в таблице Permissions с помощью Permission.findAll. Наконец, используя метод role.setPermissions, он создает связи между ролью и разрешениями в таблице RolePermissions.

Это всего лишь пример того, как можно реализовать добавление данных в подчиненных таблицах при создании роли. Реальный подход может зависеть от специфики вашего проекта и используемой базы данных.