Parse.com关系和acl

时间:2015-05-25 04:23:35

标签: ios parse-platform

我有一个“地方”课程和一个“签到”课程,以及特殊的“用户”课程。 “签到”有一个指向“地点”和“用户”的指针。简单地说,用户可以记录他访问过的地方。

“place”类仅作为读取权限,“checkin”具有读写权限。

创建“签入”对象时,我收到错误103:不允许该用户在现场执行更新操作。

我尝试过关系而不是指针,但仍然遇到了同样的问题。

我不希望“place”对象可以更新,我不明白为什么parse在内部尝试更新它。

知道为什么会发生这种情况,我如何对数据进行建模以使其按预期工作?

编辑:我添加了调用以创建checkin对象的代码。可以看出,地点和用户已经存在,因此我无意更新它。

let checkin = PFObject(className: "checkin")
    checkin["user"] = PFUser.currentUser()
    let place = PFObject(className: "place")
    place.objectId = shop.id
    checkin["place"] = place
    checkin.saveInBackgroundWithBlock { (saved: Bool, error: NSError?) -> Void in
        if saved && error == nil {
            success()
        } else {
            //
        }
    }

2 个答案:

答案 0 :(得分:0)

如果没有共享任何代码,诊断起来有点困难,因为问题可能与您在代码中尝试做的事情有关。我无法评论澄清,所以我会将答案发给我怀疑正在发生的事情。如果不是这种情况,请评论或编辑您的帖子,我很乐意尝试进一步提供帮助。

问题可能与您使用指针无关...我使用指针并且没有这样的问题。

我认为发生的事情是,根据您的权限,它不会让云创建正确的位置。如果您还取消选中“创建”地点的能力,这绝对是正确的。我理解错误表明它是一个特别的更新,但我之前也有错误/误导性错误。如果是这种情况,请允许创建。或者,如果您不希望公众能够创建场所,那么请确保当前用户具有正确的ACL,或者正在运行的云代码正在使用主密钥。

如果您的情况不是这样,并且您不想共享代码,我可以推荐另一种解决方法。为场所保留public的总体权限,以确保正确执行初始化。然后,可能在保存后的回调中,将ACL设置为不写入。

修改:以下评论解决了添加的代码

答案 1 :(得分:-1)

我认为您正在尝试使用shop.id查询对象。我对iOS编程不太熟悉,但iOS上的查询看起来像这样:

PFQuery *query = [PFQuery queryWithClassName:@"GameScore"];
[query getObjectInBackgroundWithId:@"xWMyZ4YEGZ" block:^(PFObject *gameScore, NSError *error) {
    // Do something with the returned PFObject in the gameScore variable.
    NSLog(@"%@", gameScore);
}];
// The InBackground methods are asynchronous, so any code after this will run
// immediately.  Any code that depends on the query result should be moved
// inside the completion block above.

https://parse.com/docs/ios/guide