2016-05-08 31 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}); 
});