2016-01-06 88 views
2

我的分析應用程序有一個GiftCode集合,它不允許在類級別運行find操作。爲什麼我不能在'beforeSave`函數中使用`useMasterKey()`?

我寫,防止重複碼從解析的儀表盤由我們的團隊正在進入一個beforeSave雲功能:

Parse.Cloud.beforeSave('GiftCode', function (req, res) { 
    Parse.Cloud.useMasterKey(); 

    const code = req.object.get('code'); 

    if (!code) { 
    res.success(); 
    } else { 
    const finalCode = code.toUpperCase().trim(); 

    req.object.set('code', finalCode); 

    (new Parse.Query('GiftCode')) 
    .equalTo('code', finalCode) 
    .first() 
    .then((gift) => { 
     if (!gift) { 
     res.success(); 
     } else { 
     res.error(`GiftCode with code=${finalCode} already exists (objectId=${gift.id})`); 
     } 
    }, (err) => { 
     console.error(err); 
     res.error(err); 
    }); 
    } 
}); 

正如你所看到的,我打電話Parse.Cloud.useMasterKey()(這是在解析雲中運行),但我仍然得到以下錯誤:

This user is not allowed to perform the find operation on GiftCode. 

我用其他正常功能的雲和useMasterKey()我能夠根據需要進行find操作。

useMasterKey()不適用於beforeSave功能?

回答

2

我從來沒有試過在beforeSave函數中使用主密鑰,但如果有一些額外的安全措施來防止它,我不會感到驚訝。從安全的角度來看,它似乎可以使所有基於寫入的CLP和ACL對該類無用。

嘗試選擇性地通過將其作爲一個選項到查詢像這樣

(new Parse.Query('GiftCode')) 
.equalTo('code', finalCode) 
.first({ useMasterKey: true }) 
.then((gift) => { 
    ... 
+0

謝謝 - 那爲我做了訣竅。 – namuol

0

Parse.Cloud.useMasterKey()使用主密鑰;已在Parse Server版本2.3.0(2016年12月7日)中棄用。從那個版本開始,它是一個無操作(它什麼都不做)。您現在應該將{useMasterKey:true}可選參數插入到需要在代碼中重寫ACL或CLP的每個方法中。

相關問題