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的每个方法中