/** * Copyright (c) 2026 Niolla * All rights reserved. * * This source code is proprietary and confidential. * Unauthorized copying, modification, distribution, or use * of this file, via any medium, is strictly prohibited. */ // app/models/permission/rolePermission.model.js module.exports = (sequelize, DataTypes) => { const rolePermission = sequelize.define( "rolePermission", { rp_id: { type: DataTypes.STRING, primaryKey: true }, role_id: { type: DataTypes.STRING, allowNull: false }, permission_id: { type: DataTypes.STRING, allowNull: false } }, { tableName: "rolePermission", timestamps: true, indexes: [{ unique: true, fields: ["role_id", "permission_id"] }], hooks: { afterCreate: async (record) => { const users = await sequelize.models.UserRole.findAll({ where: { role_id: record.role_id } }); await Promise.all(users.map((item) => require("../../utils/cache.util").clearPermissionCache(item.user_id))); }, afterDestroy: async (record) => { const users = await sequelize.models.UserRole.findAll({ where: { role_id: record.role_id } }); await Promise.all(users.map((item) => require("../../utils/cache.util").clearPermissionCache(item.user_id))); }, afterUpdate: async (record) => { const users = await sequelize.models.UserRole.findAll({ where: { role_id: record.role_id } }); await Promise.all(users.map((item) => require("../../utils/cache.util").clearPermissionCache(item.user_id))); }, afterBulkCreate: async (records) => { const roleIds = [...new Set(records.map((record) => record.role_id))]; const users = await sequelize.models.UserRole.findAll({ where: { role_id: roleIds } }); await Promise.all(users.map((item) => require("../../utils/cache.util").clearPermissionCache(item.user_id))); } } } ); rolePermission.associate = (db) => { rolePermission.belongsTo(db.roles, { foreignKey: "role_id", as: "role" }); rolePermission.belongsTo(db.permission, { foreignKey: "permission_id", as: "permission" }); }; return rolePermission; };