为什么我不能在`beforeSave`函数中使用`useMasterKey()`?

时间:2016-01-06 17:00:29

标签: parse-platform cloud-code

我的Parse应用程序有一个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云中运行),但我仍然收到以下错误:

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

我在其他常规云功能中使用useMasterKey(),并且能够根据需要执行find操作。

useMasterKey()不适用于beforeSave个功能吗?

2 个答案:

答案 0 :(得分:2)

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

尝试选择性地使用主密钥,方法是将其作为选项传递给查询,如此

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

答案 1 :(得分:0)

Parse.Cloud.useMasterKey();已在Parse Server版本2。0。0(2016年12月7日)中弃用。从那个版本开始,它是一个无操作(它什么都不做)。您现在应该将{useMasterKey:true}可选参数插入到需要覆盖代码中的ACL或CLP的每个方法中。