2015-04-04 7 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 

Я хотел бы знать, если есть достойный способ получить пост-запись из БД только один раз?

+0

Я думаю, что вы можете поместить свой объект post под объект req и получить его на вашем контроллере. – jaumard

+0

Если я поставил req.post = post в exec (function (err, post) в политике, могу ли я его заполнить в PostController? – Utility

+0

Нет, вам нужно выложить его на политику или получить в базе данных на контроллере – jaumard

ответ

1

Я бы выбрал эту политику для «калечения» фактического запроса, так что пользовательское условие автоматически привязывается ко всем запросам. С помощью этого подхода вы можете использовать силовые действия для извлечения всего.

Я сделал это сам, вы можете посмотреть код https://github.com/tarlepp/Taskboard/blob/angular/backend%2Fapi%2Fservices%2FRightsGet.js#L460.

Надеюсь, это поможет.

+0

Спасибо! Я читал исходный код вашей панели задач, непосредственно загружаемый с http://tarlepp.github.io/Taskboard/. Но это, кажется, намного более старая версия. – Utility

+0

Да, вот что я здесь делаю: https: // github. ком/tjwebb/паруса разрешения_доступ –