Step 2: Create the database models
Let’s create the models for User, Group, and Permission:
models/user.model.js
// models/user.model.js
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define("User", {
username: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
password: {
type: Sequelize.STRING,
allowNull: false,
},
});
return User;
};
models/group.model.js
// models/group.model.js
module.exports = (sequelize, Sequelize) => {
const Group = sequelize.define("Group", {
name: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
});
return Group;
};
// models/permission.model.js
module.exports = (sequelize, Sequelize) => {
const Permission = sequelize.define("Permission", {
name: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
codename: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
});
return Permission;
};
Step 3: Set up relationships between models
Now, let’s set up the relationships between our models:
// ... (previous code)
// models/index.js
const { Sequelize } = require('sequelize');
const dotenv = require('dotenv');
dotenv.config();
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASSWORD, {
host: process.env.DB_HOST,
dialect: 'mysql',
});
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
// Import model definitions
db.User = require('./user.model')(sequelize, Sequelize);
db.Group = require('./group.model')(sequelize, Sequelize);
db.Permission = require('./permission.model')(sequelize, Sequelize);
// ... (New code)
// User-Group Many-to-Many relationship
db.User.belongsToMany(db.Group, { through: 'UserGroups' });
db.Group.belongsToMany(db.User, { through: 'UserGroups' });
// User-Permission Many-to-Many relationship
db.User.belongsToMany(db.Permission, { through: 'UserPermissions' });
db.Permission.belongsToMany(db.User, { through: 'UserPermissions' });
// Group-Permission Many-to-Many relationship
db.Group.belongsToMany(db.Permission, { through: 'GroupPermissions' });
db.Permission.belongsToMany(db.Group, { through: 'GroupPermissions' });
module.exports = db;