Анализ CLP/ACL, вызывающий проблемы с триггером beforeSave

Спасибо, что зашли.

У меня есть класс, назовем его Class1, который я использую для предоставления пользователям скидок/купонов моего приложения. Когда пользователь завершает процесс регистрации, я создаю объект и сохраняю указатель на него у пользователя.

Я хочу дать этому классу разрешения CLP, чтобы публика могла создавать, но не записывать в этот объект. Пусть это будет только то, что я употребляю внутренне.

Моя проблема в том, что в классе есть несколько массивов, которые не могут быть неопределенными, иначе другие облачные функции в конечном итоге будут выдавать ошибки при попытке прочитать эти значения. Я установил триггер beforeSave() для класса и использую главный ключ, но объект не сохраняется, поэтому все мое пользовательское сохранение в конце регистрации не работает. Как мне исправить это, сохраняя при этом безопасность моего объекта и гарантируя, что пользователи не смогут украсть все службы моего приложения бесплатно?

Вот мой триггер beforeSave:

Parse.Cloud.beforeSave("Class1", function(request, response)
{
    Parse.Cloud.useMasterKey();
    var emptyArray = [];
    class1 = request.object;
    if( class1.isNew() )
    {
        class1.set("array1", emptyArray);
        class1.set("array2", emptyArray);
        class1.set("array3", emptyArray);
    }
    response.success();
});

person Jake T.    schedule 19.10.2015    source источник
comment
Видите ли вы данные об объекте, создаваемые в журнале? Любые сообщения об ошибках?   -  person Mo Nazemi    schedule 19.10.2015
comment
Не могли бы вы полностью избавиться от массивов? Вместо того, чтобы хранить массив указателей купонов внутри пользователя, просто свяжите указатель пользователя с каждым купоном. Как правило, я считаю, что лучше всего держать пользовательский класс как можно минимальным.   -  person Russell    schedule 19.10.2015


Ответы (1)


Так что я думаю, вы не можете использовать мастер-ключ для переопределения CLP/ACL в триггере beforeSave... хотя это имеет смысл, так как это полностью противоречит сути.

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

person Jake T.    schedule 28.10.2015