在 Parse 服务器上设置 ACL
Posted
技术标签:
【中文标题】在 Parse 服务器上设置 ACL【英文标题】:SetACLs on Parse Server 【发布时间】:2016-05-08 20:45:35 【问题描述】:我在 AWS 上使用 Parse Server,它运行良好。但是,我无法像在 parse.com 云代码中那样分配 ACL。
我已经阅读了The Compatibility Notes、Docs 和Git 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 Docs 做事:
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 云代码示例。
任何帮助将不胜感激。
【问题讨论】:
为什么Parse.User.current()不能用?如果我在移动客户端(使用 ios sdk)创建的对象上设置 afterSave(),sdk 如何传递用户对象?Parse.User.current()
无法在 Parse Server 的 nodeJS 版本上使用,请参见此处:blog.parse.com/learn/using-node-js-with-parse
谢谢-顺便说一句,您在帖子中链接的答案在 Heroku 上对我有用。我想知道为什么它不适合你?
【参考方案1】:
这就是你需要做的。我已经添加了对公众的拒绝访问,因为它并不完全清楚你想要什么。
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);
);
【讨论】:
以上是关于在 Parse 服务器上设置 ACL的主要内容,如果未能解决你的问题,请参考以下文章