【问题标题】:Changing field in PFUser from other PFUser, Parse iOS从其他 PFUser 更改 PFUser 中的字段,解析 iOS
【发布时间】:2015-12-04 17:26:24
【问题描述】:

我正在尝试从 Parse 中另一个未经身份验证的 PFUser 更改另一个 PFUser 字段的值,但我似乎无法这样做。我正在尝试从另一个用户增加一个用户的“小时”数。以下是我尝试这样做的方式:

PFUser *currentUser = [PFUser currentUser];
PFACL *ACL = [PFACL ACLWithUser:[PFUser currentUser]];
[ACL setPublicReadAccess:YES];

PFUser *selectedUser = [self.formValues objectForKey:@"user"];
NSLog(@"User ID: %@", selectedUser.objectId);

PFObject *volunteerSheet = [PFObject objectWithClassName:@"VolunteerSheet"];
volunteerSheet[@"userID"] = selectedUser.objectId;
volunteerSheet[@"fromID"] = currentUser.objectId;
volunteerSheet[@"volunteerTitle"] = [self.formValues objectForKey:@"title"];
volunteerSheet[@"location"] = [self.formValues objectForKey:@"location"];
volunteerSheet[@"volunteerHours"] = [self.formValues objectForKey:@"hours"];
volunteerSheet[@"volunteerDescription"] = [self.formValues objectForKey:@"description"];
volunteerSheet.ACL = ACL;
[volunteerSheet saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if (succeeded) {
        // The object has been saved.
        PFQuery *query = [PFQuery queryWithClassName:@"_User"];

        // Retrieve the object by id
        [query getObjectInBackgroundWithId:selectedUser.objectId
                                     block:^(PFObject *user, NSError *error) {
                                         [user incrementKey:@"volunteerHours" byAmount:(NSNumber*)[self.formValues objectForKey:@"hours"]];
                                         [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {
                                             if (succeeded) {
                                                 NSLog(@"Succeeded");
                                             }else{
                                                 NSLog(error.description);
                                             }
                                         }];
                                     }];

        NSLog(@"Saved");
        [self dismissViewControllerAnimated:YES completion:^{
            UIAlertView * alert =[[UIAlertView alloc ] initWithTitle:@"Success!"
                                                             message:@"Hours Sent succesfully."
                                                            delegate:self
                                                   cancelButtonTitle:nil
                                                   otherButtonTitles: nil];
            [alert addButtonWithTitle:@"Okay"];
            [alert show];
        }];
    } else {
        // There was a problem, check error.description
        NSLog(@"Error: %@",error.description);
    }
}];

【问题讨论】:

    标签: ios objective-c iphone parse-platform pfuser


    【解决方案1】:

    用户自动设置了不允许修改其他用户(clps 或 alcs)的安全措施。也许考虑迁移到云代码并调用使用主密钥?

    【讨论】:

      【解决方案2】:

      用户将 ACL 设置为仅允许自己更改其值。为了解决这个问题,您要么必须在每次创建用户时更改 ACL 以允许任何用户对他们拥有写权限(非常冒险且根本不安全),要么您需要调用调用 @987654321 的云函数@ ,它会覆盖所有权限,并使您能够进行更改。显然,您仍然应该进行某种安全检查,以确保在进行这些更改之前允许/正确更改这些更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多