2014-07-09 168 views
1

我正在使用Sails.js 0.10.x.我指的是"Create new record while associating w/ another new record (REST)"與多租戶系統相結合的功能。所有模型都有一個related_account作爲主鍵的一部分。我需要找到一種防彈的方式,讓它始終充滿當前用戶的相關帳戶。Sails.js:創建新記錄,同時與另一個新記錄關聯多租戶

在父子關係中,通過覆蓋藍圖並簡單地在創建記錄之前設置related_account屬性,可以很容易地填充父項的related_account。但是,由於JavaScript對象被傳遞給Model.create(parent_and_children),這意味着我將不得不循環所有的孩子,並在創建之前手動設置related_account。這項工作乏味且容易出錯,因爲我需要很多情況。此外,這可能是導致嚴重缺陷的原因,因爲我們在團隊中工作,有人可能忘記添加它。在某些情況下,可能會使用標準藍圖,但在其他情況下,可以手動執行操作。

必須有比手動設置更好的方法。任何想法是讚賞。

順便說一句:related_account的值在請求變量「user」中可用。

+0

您是如何實施多租戶的? –

+0

related_account字段始終包含租戶的帳戶。 – toovy

回答

1

也許這可以幫助。我在我需要每個記錄(在session.user.company.id中找到)登錄用戶的companyId相同。所以這是我的解決方案。這是一種策略,用於檢查模型是否有任何關聯,然後通過在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(); 

}; 
相關問題