我的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
个功能吗?
答案 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的每个方法中。