firestore 规则与 firestore 数据的比较

firestore rules compare with firestore data

我的 Cloud Firestore 中有以下设置:

Collection     Document      Collections  Documents
[USERID]   -   [TESTS]   -   [1]   -      [ANSWERS]
                                          [RESULTS]
                         
                             [2]   -      [ANSWERS]
                                          [RESULTS]

                             [3]   -      [ANSWERS]
                                          [RESULTS]

用户只能与public分享最新的测试结果。在上面的示例中,它将是 /USERID/TESTS/3/RESULTS.

我将最新的测试次数存储在/USERID/STATUS.number_tests中。在下面的示例中,number_tests = 3。(每个用户都有一个唯一的 userId,我将其存储所有数据)。

如何通过 firestore 规则限制访问,只有最新的测试结果是 public?我已经转移了userId,这部分有效。

根据 google 文档,资源变量指的是请求的文档,resource.data 是文档中存储的字段和值的映射。

根据这个描述,我用状态(这是我的文档的名称)替换了数据(这似乎是文档名称)并使用点符号来访问状态中的(地图)数据但是它不起作用。请参阅下面的尝试:

我也尝试了 get() 因为我想我使用了另一个文档的条目来授予访问权限但是这个尝试没有成功...

1 尝试:

match /{userId}/tests/{number}/results {
  allow read: if resource.status.number_answers == number
}

2 尝试:

match /{userId}/tests/{number}/results {
  allow read: if get(/databases/$(database)/documents/$(userId)/resource.status.number_answers == number
}

https://firebase.google.com/docs/firestore/security/rules-conditions

有人可以帮助我吗?

谢谢!!!

我可以自己解决。答案是:

match /{userId}/test/{cycle}/results {
  allow read: if cycle == string(get(/databases/$(database)/documents/$(userId)/status).data.number)
}

请注意,我试图将一个字符串与一个数字进行比较,这就是为什么我用字符串(get(...))包围 get(...)...