Невозможно редактировать другие объекты Parse User, сохранить в фоновом режиме не пишет в Parse Dashboard - PullRequest
0 голосов
/ 20 мая 2019

Я всюду ломал голову над этой проблемой, мне действительно нужна помощь, пожалуйста !! Я довольно новичок в Android.

Моя проблема в следующем, я заполнил пользовательский класс несколькими столбцами, например «Бывшие друзья», которые представляют собой список строк. Я делаю первый запрос, затем нахожу объекты Parseuser, соответствующие запросу (которые не являются вошедшими в систему пользователями), а затем пытаюсь заполнить эти столбцы.

Я также обновляю информацию для вошедшего в систему пользователя

Правильно работает для вошедшего в систему пользователя, однако я не вижу заполненную информацию для другого пользователя объекта Parse

Я попытался изменить права на запись для первого пользователя (objects.get (0)), но это не работает

ParseQuery<ParseUser> query = ParseUser.getQuery();


 query.whereNotEqualTo("username", getCurrentUser().getUsername());

query.whereNotContainedIn("username",getCurrentUser().getList("Former_friends"));



 query.findInBackground(new FindCallback<ParseUser>() {
     @Override
  public void done(List<ParseUser> objects, ParseException e) {



  if (e == null) {

  if (objects.size() > 0) {


// Here I just add the first object to a list and I update the current user data ,that works fine


List<String> aList = ParseUser.getCurrentUser().getList("Former_friends");
                                                aList.add(objects.get(0).getString("username"));


                                                ParseUser.getCurrentUser().put("Former_friends", aList);


                                                ParseUser.getCurrentUser().saveInBackground();


 ParseUser userfound =objects.get(0);

// The two following Lines doesn't work. I don't see "Any String" in the ParseDashboard "Name" columns..                                                

userfound.put("Name","Any String");
userfound.saveInBackground();

Нет ошибок, но нет обновления для пользователя, не вошедшего в систему

Большое спасибо,

Serge

1 Ответ

0 голосов
/ 21 мая 2019

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

Так что для этой операции необходимо написать функцию облачного кода.У вас должна быть облачная функция, подобная этой здесь:

Parse.cloud.define('formerFriends', async request => {
  const query = new Parse.Query(Parse.User);
  query.notEqualTo('username', request.user.getUsername());
  query.notContainedIn('username', request.user.get('Former_friends'));
  const objects = await query.find({ useMasterKey: true });
  if (object.length > 0) {
    const aList = request.user.get('Former_friends');                                                
    aList.add(objects[0].getUsername());
    request.user.set('Former_friends', aList);
    await request.user.save();
    const userfound = objects[0];
    userfound.set('Name', 'Any String');
    await userfound.save(null, { useMasterKey: true });
  }
});

А затем вызовите облачную функцию из Android следующим образом:

HashMap<String, Object> params = new HashMap<String, Object>();
ParseCloud.callFunctionInBackground("formerFriends", params, new FunctionCallback<Float>() {
  void done(Object result, ParseException e) {
    if (e == null) {
      // success
    }
  }
});
...