2015-04-04 119 views
1

我把角色策略檢查:如何避免Sails.js策略和控制器的多個數據庫訪問?

module.exports = function(req, res, next) { 
    var postId = req.param('postId'); 
    var userId = req.session.user.id; 

    Post.findOne({id: postId}) 
     .exec(function (err, post) { 
      if (err) { return next(err); } 

      if (!post) { 
       return res.notFound('Post not found'); 
      } 

      if (post.author !== userId) { 
       return res.forbidden('Not the author'); 
      } 

      next(); 
     }); 
}; 

而在PostController中,我需要再次讀取該職位(以及可能的填充一些相關的數據)

update: function (req, res) { 
    var postId = req.param('postId'); 
    Post.findOne({id: postId}).populate('tags') 
     .exec(function (err, post) { 
     // Update the post here 

我想知道是否有隻有一次從DB獲取帖子記錄的體面方式?

+0

我認爲你可以把你的帖子對象置於req對象下並將其檢索到你的控制器上 – jaumard 2015-04-04 07:44:01

+0

如果我把req.post = post放在exec(function(err,post)策略中,我還可以在PostController中填充它嗎? – Utility 2015-04-04 09:20:12

+0

沒有,你必須在策略上打開它或在控制器上檢索數據庫 – jaumard 2015-04-04 09:24:13

回答

1

我會制定該策略以「破壞」實際查詢,以便用戶條件自動附加到所有請求。通過這種方法,您可以使用藍圖操作來獲取所有內容。

我已經自己做了這個,你可以在那裏看看代碼https://github.com/tarlepp/Taskboard/blob/angular/backend%2Fapi%2Fservices%2FRightsGet.js#L460

我希望這會有所幫助。

+0

Thanks!我正在閱讀從http://tarlepp.github.io/Taskboard/直接下載的Taskboard的源代碼,但這似乎是一個更老的版本。 – Utility 2015-04-04 12:31:41

+0

是的,這是我在這裏做的:https://github。 COM/tjwebb /帆的權限 – 2015-04-04 12:31:47