Parse platform 为什么可以';我不能在`beforeSave`函数中使用`useMasterKey()`吗?

Parse platform 为什么可以';我不能在`beforeSave`函数中使用`useMasterKey()`吗?,parse-platform,parse-cloud-code,Parse Platform,Parse Cloud Code,我的解析应用程序有一个GiftCode集合,它不允许类级别的find操作 我正在编写一个beforeSave云函数,以防止我们的团队从Parse的仪表板输入重复的代码: Parse.Cloud.beforeSave('GiftCode', function (req, res) { Parse.Cloud.useMasterKey(); const code = req.object.get('code'); if (!code) { res.success(); }

我的解析应用程序有一个
GiftCode
集合,它不允许类级别的
find
操作

我正在编写一个
beforeSave
云函数,以防止我们的团队从Parse的仪表板输入重复的代码:

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()
(这是在Parse Cloud中运行的),但仍然收到以下错误:

This user is not allowed to perform the find operation on GiftCode.
我在其他普通云函数中使用
useMasterKey()
,并且能够根据需要执行
find
操作


useMasterKey()
是否不适用于
beforeSave
函数?

我从未尝试在beforeSave函数中使用主密钥,但如果有一些额外的保护措施来防止它,我不会感到惊讶。从安全性的角度来看,它似乎会使所有基于写的CLP和ACL对该类毫无价值

尝试有选择地使用主密钥,将其作为选项传递给查询,如下所示

(new Parse.Query('GiftCode'))
.equalTo('code', finalCode)
.first({ useMasterKey: true })
.then((gift) => {
    ...
Parse.Cloud.useMasterKey();已在解析服务器版本2.3.0(2016年12月7日)中被弃用。从那个版本开始,它是一个无操作(它什么也不做)。现在,您应该将{useMasterKey:true}可选参数插入到需要在代码中重写ACL或CLP的每个方法中