无法匹配新创建的文档中的ref以请求uid

时间:2020-04-16 08:58:32

标签: firebase google-cloud-firestore firebase-security

对不起,如果我的问题重复了,但是我没有找到其他有关此问题的帖子!

仅当新创建的数据包含一个引用其/packages/文档的字段时,我才希望让用户创建一个新的users/{uid}文档。

我在写文档时已经使用了以下函数来比较ref(这里是https://stackoverflow.com/a/56082683/7584576,顺便问一句!):

    function refMatch(field) {
      return request.auth != null && request.auth.uid != null && field in resource.data
        && resource.data[field] == /databases/$(database)/documents/users/$(request.auth.uid)
    }

我对其进行了修改以访问请求中的数据(文档中尚不存在):

    function createdRefMatch(field) {
      return request.auth != null && request.auth.uid != null && field in request.resource.data
        && request.resource.data[field].path == /users/$(request.auth.uid)
    }

它是这样使用的:

    match /packages/{packageId} {
      allow create: if createdRefMatch('user');
    }

问题在于,即使request.resource.data[field].path == /users/$(request.auth.uid)行看起来也应该起作用,但比较总是虚假的。当我调试firebase中的值时,事实证明,左侧始终是一个对象({"field":"..."}),右侧始终是字符串。看来无论我是否使用.path都不会改变任何东西,调试器总是显示对象而不是值。

我还尝试比较两个对象(不确定是否仍然可以这样做),但是问题是field值中的一个以斜杠开头,而另一个则不是。

我什至试图像这样更改比较:

/databases/$(database)/documents/$(request.resource.data[field].path) == /databases/$(database)/documents/users/$(request.auth.uid)

但是随后$(request.resource.data[field].path)部分以某种方式用类似百分比的url值代替了斜杠。

请,有人可以指出我可以更改使其工作吗?看起来,操作这些数据的不同方式会更改数据本身。真是个地狱:)

感谢您的时间!

0 个答案:

没有答案