在 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的主要内容,如果未能解决你的问题,请参考以下文章

更新查询对象上的 Parse ACL

用于删除的解析服务器“找不到对象”

在远程文件/目录上设置 ACL 时未经授权的操作

解析:ACL 无法将数据发送到服务器

为 Nomad 客户端启用 ACL 的目的

无法快速删除 Parse 对象 - ACL 问题?