Parse platform 限制用户更新某些字段,但允许后端编辑这些字段
我在用户模型上存储了一些字段,这些字段永远不应该由用户自己编辑,而应该只由后端更新。因此,我在保存之前进行验证:Parse platform 限制用户更新某些字段,但允许后端编辑这些字段,parse-platform,parse-cloud-code,Parse Platform,Parse Cloud Code,我在用户模型上存储了一些字段,这些字段永远不应该由用户自己编辑,而应该只由后端更新。因此,我在保存之前进行验证: // import all models var Models = require('cloud/models/index'); // Models.User is a subclass of Parse.User Parse.Cloud.beforeSave(Models.User, function (request, response) { var user = re
// import all models
var Models = require('cloud/models/index');
// Models.User is a subclass of Parse.User
Parse.Cloud.beforeSave(Models.User, function (request, response) {
var user = request.object;
// prevent numberOfApples from being modified on clients
if(user.existed()) {
if(user.dirty('numberOfApples')) {
response.error('User is not allowed to modify numberOfApples.');
return;
}
}
response.success();
});
所以我检查模型是否存在过,这很重要,这样在注册时就不会触发这些东西。但后来我试图从Parse dashboard手动更新该字段,它抛出了错误。如何确保只有用户不允许编辑此字段,而仪表板或后端可以这样做(显然是在使用主密钥时)。这里有两个因素。首先,看看您为每个对象提供的访问控制(ACL)。它们通常用于确定权限。但是,由于您有一个“beforeSave”函数,因此也将考虑该函数。即使在仪表板或后端上所做的更改也会触发beforeSave功能
我的建议是从用户表中删除用户不应更改的属性,并将它们存储在自定义表中,并使用指向它们所属的用户对象的指针。结果是
请求。这里的方法是master
。我允许在使用主密钥时更改锁定的字段
例如:
Parse.Cloud.beforeSave(Models.User, function (request, response) {
var user = request.object;
// prevent system managed fields from being modified on clients
if(user.existed()) {
// we can change those fields when using master key.
if(!request.master) {
var privateFields = [ 'gold', 'skillLevel', 'weaponCount' ];
for(var i = 0, c = privateFields.length; i < c; i++) {
var field = privateFields[i];
if(user.dirty(field)) {
response.error('User is not allowed to modify ' + field + '.');
return;
}
}
}
}
response.success();
});
Parse.Cloud.beforeSave(Models.User,函数(请求,响应){
var user=request.object;
//防止在客户端上修改系统管理的字段
if(user.existed()){
//我们可以在使用主密钥时更改这些字段。
如果(!request.master){
var privateFields=[‘黄金’、‘技能等级’、‘武器计数’];
for(var i=0,c=privateFields.length;i
我认为您需要创建一个带有私有字段的新类。ACL由该用户自己设置为公共只读写。如果我只能检查是否使用masterKey触发了操作,我相信在这种情况下,这应该足以放松对字段的限制。但我不必这样做,因为request.master
可以告诉我请求是否使用主密钥运行,然后我可以忽略锁定字段的验证。@xybrek当然,我已经更新了答案。我不知道为什么我有user.existed()
检查,但在我的情况下,user
只能由后端创建。谢谢你的回答