2015-10-07 7 views
0

Я пытаюсь изменить пользователь, который не является текущим пользователем с помощью следующего кодаАнализировать - пользователь изменения, которые не текущий пользователя

let query = PFQuery(className:"_User") 

     query.getObjectInBackgroundWithId(userId) { 
      (object: PFObject?, error: NSError?) -> Void in 

      print("UPDATE THIS USER->\(object)") 

      if error != nil 
      { 
       print("COULD NOT CHANGE REPUTATION \(error?.localizedDescription)") 
      } 
      else if let object = object 
      { 
       object.incrementKey("reputation", byAmount: value) 
       object.saveEventually({ (succeeded: Bool, error: NSError?) -> Void in 
        print("USER REPUTATION CHANGE SUCCEDDED? ->\(succeeded) -> MODIFIED TO \(value)") 
       }) 
      } 
     } 

я могу получить пользователь, но не могу сохранить изменения, как я получаю следующее сообщение об ошибке: выходного

2015-10-08 10: 28: 39,343 Hobbiester [11591: 718652] [Ошибка]: Caught «NSInternalInconsistencyException» разум «Пользователь не может быть сохранен, если они не прошли проверку подлинности с помощью Логина или signUp ":

+0

Необходимо обновить его с сервера или связать отдельный объект 'репутации ', который могут обновить другие пользователи. – Logan

ответ

0

Это не сработает, как предусмотрено.

Parse позволяет читать другие объекты _user, но не писать им. Если вы думаете об этом, это имеет смысл с точки зрения безопасности. В противном случае вы можете изменить пароли, электронную почту, имя и т. Д. Для других пользователей. Клиентское приложение должно будет войти в систему как этот пользователь, чтобы внести изменения в этот объект _user.

https://parse.com/docs/android/guide#security-object-level-access-control

... The only exception is the _User class. We never allow users to write each other's data, but they can read it by default.

Вы можете создать еще одну таблицу в разборе, возможно, таблицу изменений репутации проиндексированных _users. Любой пользователь может писать в эту таблицу. Затем, чтобы получить текущую репутацию, вы запрашиваете таблицу изменений и складываете все изменения. Вы можете настроить его таким образом, чтобы все пользователи имели доступ к новому классу в некотором роде, что имеет смысл для вашего приложения. Просто мысль.

0

Как упоминается в другом ответе, вы не можете изменять пользователей, которые не являются текущим пользователем, но вы можете создать облачную функцию и использовать Parse.Cloud.useMasterKey(); Это позволит вам затем запрашивать пользователей и изменять объекты.

Parse.Cloud.define("RemoveFollower", function(request, response){ 
var username = request.params.username_of_other_user; 
var query = new Parse.Query(Parse.User); 
query.equalTo("username", username); 
query.find({ 
success: function(results){ 
    var u = results[0]; 
    //u modify the user u however you like... 
    u.save(); 
    response.success("Success"); 
}, 
error: function(){ 
    response.error("Error"); 
} 
});