Как запретить пользователю редактировать определенный столбец, все еще имея доступ на запись к объекту в Parse?

У меня есть некоторые конкретные столбцы на моем _User класс, который я хочу редактировать только с мастер-ключом на стороне сервера. Мой пользователь имеет право на запись для себя. Есть ли способ запретить моему пользователю редактировать определенные столбцы, например, скажем, у меня есть пользовательский объект, и я хочу, чтобы пользователь не редактировал свои собственные точки:

before save trigger:
 if(points field have been changed by the user){
  response.error();
 )

Это не должно быть перед сохранением, но я сильно сомневаюсь, что есть какой-то другой пункт, чтобы проверить такой "грязный" столбец, если таковой имеется. Есть ли способ достичь того, что мне нужно (кроме очевидных решений, таких как создание нового класса, установка его ACL равным none, удержание указателя пользователя и столбца оценки и редактирование этого только с помощью мастер-ключа)?

1 ответ

Решение

Вот документация Parse JavaScript, связанная с "грязными" объектами и свойствами.

{Boolean} dirty (attr)

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

Параметры: {String} attr

Имя атрибута (необязательно).

Возвращает: {Boolean}

Если вы соедините этот бит (звонит dirty("score") с функцией Облачного кода beforeSave() вы должны получить то, что хотите.

Модификация объектов при сохранении

В некоторых случаях вы не хотите выбрасывать неверные данные. Вы просто хотите немного подправить его перед сохранением. beforeSave может обработать этот случай тоже. Вы просто вызываете response.success для измененного объекта.

В нашем примере с обзором фильмов мы могли бы убедиться, что комментарии не слишком длинные. Один длинный комментарий может быть сложно отобразить. Мы можем использовать beforeSave для усечения поля комментария до 140 символов:

Parse.Cloud.beforeSave("Review", function(request, response) {
    var comment = request.object.get("comment");
    if (comment.length > 140) {
        // Truncate and add a ...
       request.object.set("comment", comment.substring(0, 137) + "...");
    }
    response.success();
});
Другие вопросы по тегам