Parse platform 为什么可以';t我将用户的ACL设置为:false+;写:假?

Parse platform 为什么可以';t我将用户的ACL设置为:false+;写:假?,parse-platform,acl,Parse Platform,Acl,我正试图通过RESTAPI创建一个新用户,并希望该对象只能由创建它的用户访问(读+写)。如果我创建用户时没有设置ACL,只设置用户名/密码,它会自动获取“Public Read,xxxx”,其中xxxx是objectId 如果我在create user调用中包含ACL,它会自动忽略该字段,并为其提供相同的公共读取访问权限 {"username":"dummyUsersname","ACL":{"*":{"write":false,"read":false}},"password":"dummyP

我正试图通过RESTAPI创建一个新用户,并希望该对象只能由创建它的用户访问(读+写)。如果我创建用户时没有设置ACL,只设置用户名/密码,它会自动获取“Public Read,xxxx”,其中xxxx是objectId

如果我在create user调用中包含ACL,它会自动忽略该字段,并为其提供相同的公共读取访问权限

{"username":"dummyUsersname","ACL":{"*":{"write":false,"read":false}},"password":"dummyPassword"}
如果在创建对象后尝试更新ACL,则会得到:

code: 123 error: Invalid acl {"*":{"read":false,"write":false}}

然而,基于网络的数据浏览器可以让我毫无怨言地撤销公众的阅读权限。知道发生了什么吗?

尝试使用云代码功能:

Parse.Cloud.beforeSave(Parse.User, function(request, response) {
    var acl = new Parse.ACL();
    acl.setPublicReadAccess(false);
    acl.setPublicWriteAccess(false);

    request.object.setACL(acl);
    response.success();
});
当使用它时,请求

curl -X POST \
  -H "X-Parse-Application-Id: <app_id>" \
  -H "X-Parse-REST-API-Key: <rest_api_key>" \
  -H "X-Parse-Revocable-Session: 1" \
  -H "Content-Type: application/json" \
  -d '{"username":"cooldude6","password":"p_n7!-e8","phone":"415-392-0202"}' \
  https://api.parse.com/1/users

希望这有帮助。

实际上,您不需要通过编程方式构建ACL来获得“仅主密钥”的正确行为,您只需要指定一个空对象({})。调用方法来设置正确的参数是可行的,但它不能回答为什么会出现这种情况的问题

答案是,尽管恼人且不一致,只需为ACL提供一个空对象或根本不提供对象,就可以用速记形式显式地表示它。证明:

var acl = new Parse.ACL();
acl.toJSON();
输出:
{}

acl.setPublicReadAccess(true);
acl.toJSON();
输出:
{'*':{read:true}

acl.setPublicReadAccess(false);
acl.toJSON();
输出:
{}

acl.setPublicReadAccess(true);
acl.toJSON();
请注意,取消设置公共读取访问将完全删除密钥,而不是将读取设置为false

这使得以编程方式构建ACL变得很困难,因为您可能认为
{'*':{read:false,write:false}}
是等效的,但事实并非如此


只要提供
ACL:{}
,它就可以正常工作。干杯。

Small nit:如果要为预定义类添加触发器,则不应传入字符串作为类名,在本例中,请使用
Parse.User
而不是
“\u User”