Sails.js:创建新记录,同时将另一个新记录与多租户关联
我使用的是Sails.js0.10.x。我指的是与多租户系统结合使用的功能。所有型号都有一个相关的_帐户作为主键的一部分。我需要找到一种防弹的方法,让它始终充满当前用户相关的帐户 在父子关系中,通过覆盖blueprint并在创建记录之前简单地设置related_account属性,可以很容易地填充父级上的相关_帐户。但是,当javascript对象被传递到Model.create(parent_和children)时,这意味着我必须在创建之前循环所有子对象并手动设置相关的_帐户。这项工作是乏味和容易出错的,因为有很多情况下我需要它。此外,当我们在一个团队中工作时,这可能是导致严重缺陷的一个原因,有人可能会忘记添加它。在某些情况下,可以使用标准蓝图,在其他情况下,可以手动执行操作 一定有比总是手动设置更好的方法。任何想法都值得赞赏Sails.js:创建新记录,同时将另一个新记录与多租户关联,sails.js,waterline,Sails.js,Waterline,我使用的是Sails.js0.10.x。我指的是与多租户系统结合使用的功能。所有型号都有一个相关的_帐户作为主键的一部分。我需要找到一种防弹的方法,让它始终充满当前用户相关的帐户 在父子关系中,通过覆盖blueprint并在创建记录之前简单地设置related_account属性,可以很容易地填充父级上的相关_帐户。但是,当javascript对象被传递到Model.create(parent_和children)时,这意味着我必须在创建之前循环所有子对象并手动设置相关的_帐户。这项工作是乏味和
顺便说一句:请求变量“user”中提供了相关账户的值。这可能会有所帮助。我在每个记录上都需要登录用户的companyId(在session.user.company.id中找到),我也在这样做。这就是我的解决方案。这是一个检查模型是否有任何关联的策略,然后通过这些关联在req.body对象中添加companyId进行循环
module.exports = function(req, res, next) {
req.options.where = _.assign({companyId : req.session.user.company.id}, req.options.where);
var attachCompanyIdToBody = function(){
if(_.isArray(req.body)){
} else if (_.isObject(req.body)){
req.body.companyId = req.session.user.company.id;
attachCompanyIdToAssociations();
}
};
var attachCompanyIdToAssociations = function(){
// Get assocations with current model
var Model = actionUtil.parseModel(req);
if(Model.associations){
_.forEach(Model.associations, function(item,index,object){
// if has company attached, remove company
if(req.body[item.alias] && item.alias.toLowerCase() !== 'company'){
if(_.isArray(req.body[item.alias])){
// ToDo if assocation is a collection then loop through collection adding companyId
} else if(_.isObject(req.body[item.alias])){
// if assocation is object then add companyId to object
req.body[item.alias].companyId = req.session.user.company.id;
}
}
});
}
};
if(req.body){
attachCompanyIdToBody();
}
return next();
};
您是如何实现多租户的?相关的_account字段始终包含租户的帐户。