Почему я не могу использовать `useMasterKey()` в функции `beforeSave`?

В моем приложении 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 функциям?


person namuol    schedule 06.01.2016    source источник


Ответы (2)


Я никогда не пытался использовать мастер-ключ в функции beforeSave, но я не удивлюсь, если есть какие-то дополнительные меры безопасности для предотвращения этого. С точки зрения безопасности кажется, что это может сделать все основанные на записи CLP и ACL бесполезными для этого класса.

Попробуйте выборочно использовать мастер-ключ, передав его как вариант запроса, например

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

Parse.Cloud.useMasterKey(); устарел в Parse Server версии 2.3.0 (7 декабря 2016 г.). Начиная с этой версии, это не работает (ничего не делает). Теперь вы должны вставить необязательный параметр {useMasterKey:true} в каждый из методов, которые должны переопределить ACL или CLP в вашем коде.

person alvaro    schedule 01.06.2017