Parse.com:删除对象数组的公共读取访问权限

时间:2014-10-24 21:08:04

标签: javascript parse-platform cloud-code

我有一个iOS应用程序,我用Parse作为后端编写。

用户可以在系统中存储项目。项目具有与之关联的一个或多个图片。默认情况下,用户的项目和图片只能由该用户访问。用户可以生成项目的警报。当项目具有警报时,将对项目及其图片进行公共读取访问。当警报到期时,我想撤销对这些对象的公共读访问权。

目前,我在创建提醒时通过iOS客户端添加公共访问权限。由于警报可能会过期或被用户关闭,我正试图在after_save处理程序中处理Parse的Cloud Code中的另一半代码。

我目前正在尝试以下方法:

if (alert.get("isActive") === false) {
    // This alert has been rendered inactive, so make sure all photos are not publically readable
    var photos = alert.get("photos");
    if (photos !== undefined && photos.length > 0) {
        for (var i = 0; i < photos.length; i = i + 1) {
            var photo = photos[i];
            photo.fetch().then(function () {                                
                var photoACL = photo.getACL();
                photoACL.setPublicReadAccess(false);
                photo.setACL(photoACL);
                photo.save();
            });                         
        }
    }
}

警报有一个名为“照片”的数组。其中每个都应该是一个指向parseClassName“photo”的对象的指针。

当我查看我的控制台日志时,我看到了针对传入警报报告的内容的预期数据。我看到警报及其属性等。具体来说,“照片”数组看起来像我认为应该。

但问题是,我似乎无法弄清楚如何操纵该数组。我一直遇到的错误是我无法在setPublicReadAccess上致电undefined。很好,这意味着photoACLundefined,但是为什么? alert.photos数组中的项目是ParseObject个实例。那么.fetch()不应该有效吗?

此外,当我尝试将对象本身记录到控制台时(使用console.log(JSON.stringify(photo))),我得到奇怪的不一致结果。有时候我只得到{"objectId":"whatever"},但有时我会看到包含所有属性的整个对象。

1 个答案:

答案 0 :(得分:1)

Fetch将获取的对象传递给回调,它不会将其分配给原始&#34;照片&#34;变量:

photo.fetch().then(function (photo) {
    // "photo" now refers to the fetched object
});

我认为这应该可以解决您遇到的未定义问题。