node.js - 在 Sequelize.js 中为多对多关系添加默认角色

标签 node.js orm sequelize.js

我有两个通过多对多关系连接的 Sequelize.js 模型。

用户:

module.exports = (sequelize, DataTypes) => {
    const model = sequelize.define('User', {
        email: {
            type: DataTypes.STRING,
            unique: true,
            allowNull: false
        },
        password: {
            type: DataTypes.CHAR,
            length: 60,
            allowNull: false
        }
    }
    });

    model.associate = models => {
        model.belongsToMany(models.Role, {
            hooks: true,
            through: 'user_roles'
        })
    };

    return model;
};

角色:

module.exports = (sequelize, DataTypes) => {
    const model = sequelize.define('Role',
        {
            name: {
                type: DataTypes.STRING,
                unique: false,
                allowNull: false
            }
        }
    );

    model.associate = models => {
        model.belongsToMany(models.User, {
            hooks: true,
            through: 'user_roles'
        });
    };

    return model;
};

user_roles自动创建。

如何设置在创建新用户时将插入到user_roles中的默认角色?有没有办法在模型定义中定义它,或者我只是应该创建 User 新用户,然后在一个事务中创建关系?

最佳答案

首先,您需要为 user_roles 创建一个模型,创建后您必须在用户模型中设置一个 Hook ,该 Hook 将自动将角色插入到 user_roles 表中。

这就是你可以做到的。

例如:

用户模型

const { hooks } = require('./user-role.hook');
module.exports = (sequelize, DataTypes) => {
    const model = sequelize.define('User', {
        email: {
            type: DataTypes.STRING,
            unique: true,
            allowNull: false
        },
        password: {
            type: DataTypes.CHAR,
            length: 60,
            allowNull: false
        }
    }, { hooks });

    model.associate = models => {
        model.belongsToMany(models.Role, {
            hooks: true,
            through: 'user_roles'
        })
    };

    return model;
};

Hook 文件

exports.hooks = {
    afterCreate: (User, payload) => {
        AddUserRole(User, payload);
    }
}

function AddUserRole(User, payload) {
    let InsertArr = {
        user_id: User._id,
        role_id: 1 // pass default role id

    }
    model.UserRole.create(InsertArr);
}

关于node.js - 在 Sequelize.js 中为多对多关系添加默认角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57947640/

相关文章:

.net - NHibernate 的产品发布

database - 序列化字段关联

node.js - 保护 nodeJS 数据库配置文件

node.js - 如何使用 Apple Pay 和 Google Pay 集成配置 Stripe

javascript - 在 NodeJS 中通过 plivo API 发送群发短信

java - 两个相关 JPA 实体之间的接口(interface)

hibernate - 域模型对象在层之间传递开销吗?

node.js - 使用 Azure DevOps 部署 Azure Function 时出现 @prisma/client 错误

sql - 使用 Sequelize 从另一个表中丢失的 postgresql 表中获取数据

javascript - 如何检查 Sequelize 计数并在计数 > 0 时返回 bool 值