js:在创建新记录的同时将另一个新记录与多租户关联



我使用Sails.js 0.10.x。我将文档中的功能称为"在与另一个新记录关联的同时创建新记录(REST)",并结合使用多租户系统。所有模型都有一个related_account作为主键的一部分。我需要找到一个防弹的方法,让它总是充满当前用户相关的帐户。

在父子关系中,通过覆盖蓝图并在创建记录之前简单地设置related_account属性,很容易在父节点上填充related_account。但是,当javascript对象传递给Model.create(parent_and_children)时,这意味着我必须在创建之前循环遍历所有子节点并手动设置related_account。这项工作是乏味的,容易出错,因为有很多情况下,我需要它。此外,当我们在团队中工作时,这可能会导致严重缺陷,而有些人可能会忘记添加它。在某些情况下,可以使用标准蓝图,在其他情况下,可以手动实现操作。

一定有比手动设置更好的方法。任何想法都很感激。

顺便说一下:related_account的值在请求变量"user"中可用。

也许这能帮上忙。我在需要每条记录(在session.user.company.id中找到)上登录用户的公司id的地方做同样的事情。这就是我的解。这个策略检查模型是否有关联,然后循环遍历这些关联,并在请求中添加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();
};

相关内容

  • 没有找到相关文章

最新更新