2016-05-08 28 views
0

我在AWS上使用解析服务器,并且一直很顺利。但是,我无法像在parse.com云代码中那样分配ACL。解析服务器上的SetACL

我已阅读The Compatibility Notes,DocsGit Read me但是很少提及ACL。

以下answer已被尝试过,但它不适用于我。

我的旧代码是这样的:

Parse.Cloud.afterSave("Favourites", function(request) { 
    var user = request.user; 
    var newACL = new Parse.ACL(Parse.User.current()) 
    newACL.setReadAccess(user, true); 
    newACL.setWriteAccess(user, true); 
    request.object.setACL(newACL); 
    request.object.save(); 
}); 

显然Parse.User.current()不能使用已经把我带到这个:

Parse.Cloud.beforeSave("Favourites", function(request, res) { 

    var acl = new Parse.ACL(); 
    acl.setReadAccess(request.object.id, true); 
    acl.setWriteAccess(request.object.id, true); 
    request.object.setACL(acl); 
    res.success(); 

}); 

然而,这不是为我工作。

我也试着在保存的同时使用以下设置ACL,但它仍然不适用于我。

var favourites = new Favourites(); 

var acl = new Parse.ACL(); 
acl.setReadAccess('request.object.id', true); 
acl.setWriteAccess('request.object.id', true); 
favourites.setACL(acl); 

favourites.save({ 
    user: request.user, 
    favourites: request.params.favourites 
}, { 
    success: function(favourites) { 
     console.log('Great!') 
    }, 
    error: function(favourites, error) { 
     console.log('The save failed'); 
    } 
}); 

编辑

我刚才试着做使用JavaScript文件的东西:

var favourites = new Favourites(); 

    var acl = new Parse.ACL(request.user); 
    acl.setReadAccess(request.user, true); 
    acl.setWriteAccess(request.user, true); 
    acl.setPublicWriteAccess(false); 
    acl.setPublicReadAccess(false); 
    favourites.setACL(acl); 
    favourites.set("favourites", request.params.favourites); 
    favourites.set("userId", request.user.id); 
    favourites.set("user", request.user); 
    favourites.save({}, { useMasterKey: true }); 

还不行!

Docs中似乎严重缺乏node.js云代码示例。

任何帮助将不胜感激。

+0

为什么不能使用Parse.User.current()?如果我在由移动客户端创建的对象上设置afterSave()(使用iOS sdk),那么sdk如何传递用户对象? – MayNotBe

+0

'Parse.User.current()'不能在nodeJS版本的Parse Server上使用请看这里:http://blog.parse.com/learn/using-node-js-with-parse/ – Taylorsuk

+0

谢谢 - btw,你在帖子中链接的答案在Heroku上为我工作。我想知道为什么它不适合你? – MayNotBe

回答

0

这就是你需要做的。我已添加拒绝访问公众,因为它不完全清楚你想要什么。

Parse.Cloud.afterSave("Favourites", function(request) { 

    var newACL = new Parse.ACL(); 

    // Are you sure you don't need to disable public access? 
    newACL.setPublicReadAccess(false); 
    newACL.setPublicWriteAccess(false); 

    // Give access to user 
    newACL.setReadAccess(request.user, true); 
    newACL.setWriteAccess(request.user, true); 

    // Assign ACL to object 
    request.object.setACL(newACL); 

    // Use master key 
    request.object.save(null, {useMasterKey: true}); 
});