在 Cloud Code 中创建 ACL 时出错:无效的权限类型

Error when creating ACL in Cloud Code: invalid permission type

TL;DR

设置具有角色权限的 ACL 有时会失败,因为角色的名称被解释为权限类型。


设置

在 Cloud Code 函数中,我创建了一个 ACL 对象并使用 setRoleReadAccess 向角色授予读取权限:

const roleName = 'foo'; // this string is actualy calculated, but always non-nil and non-empty
const acl = new Parse.ACL();
acl.setRoleReadAccess(roleName, true);

然后我将该 ACL 设置为一个新的(未保存的)对象:

const myObject = new MyObject()
myObject.setACL(acl);

错误

setACL 调用导致异常并显示错误消息 Tried to create an ACL with an invalid permission type. 这看起来很奇怪,因为我没有提供自定义权限类型。

到目前为止我尝试了什么

我的应用程序的其他部分中也有类似的 ACL/role 代码,所以我确信这个 应该 有效。现在,我正在寻找提示——什么可能导致角色名称被解释为权限类型的奇怪行为——以及有关如何进一步调试此问题的提示。

(使用 parse-server 版本 2.3.3 和 node.js 6.4.0;我目前被锁定到那个 Parse 版本。)

问题是由于全局 Mocha 测试设置文件中有 global.Parse = require('parse/node');当 运行 所有集成测试(> 300 次测试,大约需要 4 分钟)时,这会导致一些奇怪的效果,如提到的 Tried to create an ACL with an invalid permission type,但也会 You cannot use [object Object] as a query parameter;这两个错误仅在运行时负载很重时发生,并且 运行 所有测试 -- 只有 运行 一个测试从未产生任何错误。

详细信息在此 Github issue