2015-08-23 36 views
1

隨着找到更新方法,我能夠通過添加設置req.options.where.owner = userID一個政策來限制僅限於登錄的用戶數據的抓取,因此我不需要創建自定義的控制器或這些方法的模型。如何用政策限制findOne

隨着更新創建我還可以設置req.options.values.owner = userID使得用戶傾斜創建或更新的對象,將屬於另一個用戶。

但問題是,藍圖findOne控制器沒有這種過濾的任何選項,所以任何登錄的用戶可以請求創建並由另一個用戶擁有的對象。

無論如何,我可以限制findOne沒有寫我自己的控制器和查詢嗎?

回答

2

找到了解決問題的辦法,你可以做的是通過創建一個命名的文件夾覆蓋默認藍圖行動藍圖在您的API文件夾,裏面你可以創建一個findone.js(小寫)文件,

  1. 副本從/node_modules/sails/lib/hooks/blueprints/actions/findOne.js原來的藍圖行動/api/blueprints/findone.js
  2. 添加.where(actionUtil.parseCriteria(req));到查詢。
  3. 不要忘記的actionutil路徑從require('../actionUtil');改變require('../../node_modules/sails/lib/hooks/blueprints/actionUtil');

瞧,現在findOne行動會尊重你的req.options.where查詢。

1

您可以在策略中指定的藍圖這樣

module.exports = function (req, res, next) { 

    var blueprint = req.options.action; 

    if (blueprint === 'findOne') { 
    // do restriction here 
    return next(); 
    } 

    res.forbidden('not allowed to do something'); 
}; 

我寧願忘記,是藍圖名findOnefindone