gpt4 book ai didi

firebase - Firestore 安全规则获取引用字段/ID

转载 作者:行者123 更新时间:2023-12-03 18:14:11 26 4
gpt4 key购买 nike

我有两个集合 - 租户和用户。

租赁文档有一个名为“landlordID”的字段,其类型为 REFERENCE(不是字符串)。

现在在我的 Firestore 安全规则中,我希望仅当该租户的 ownerID 字段与发出请求的用户的 uid 匹配时才允许更新租户,即 request.auth.uid .

将其读作“如果创建用户的用户经过身份验证,则允许更新租赁文档,因此 request.auth.uid != null,并且 ownerID 字段的 ID 应等于 request.auth.uid 的 ID。

因此代码应该是这样的:

    service cloud.firestore {

match /databases/{database}/documents {

match /tenancies/{tenancyID}{

allow update: if request.auth.uid != null &&
request.auth.uid == get(resource.data.landlordID).id
}

}

我也试过 get(/databases/$(database)/documents/users/$(resource.data.landlordID)).data.id
支持我的数据库截图

enter image description here

这应该很简单,但 get() 根本不起作用。 Firebase Docs, scroll to "Access other documents"对我的情况根本没有帮助,我不知道如何让它发挥作用。

如果不能像这样使用引用,那将是一种耻辱,因为它们就像文档的任何其他字段一样。

最佳答案

我在这里看到几个问题。第一个问题是 get() 函数需要一个完全指定的文件路径,例如:

get(/databases/$(database)/documents/users/$(resource.data.landlordID)).data.id

第二个问题是您试图在规则中使用引用类型,不幸的是,我认为这是不可能的。

Firestore 中的引用类型不是很有帮助(还),我认为您应该将 ownerID 存储为字符串,然后您可以简单地执行以下操作:
service cloud.firestore {

match /databases/{database}/documents {

match /tenancies/{tenancyID}{

allow update: if request.auth.uid != resource.data.landlordID;

}

}

关于firebase - Firestore 安全规则获取引用字段/ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55159617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com