当前位置: 首页 > 知识库问答 >
问题:

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

董联
2023-03-14

我有两个收藏-租赁和用户。

租赁单据有一个名为“LandlorDid”的字段,类型为引用(而不是字符串)。

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

    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()根本不起作用。Firebase文档,滚动到“Access other Documents”(访问其他文档)对我的情况没有任何帮助,我不确定如何使其工作。

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

共有1个答案

鲁霄
2023-03-14

我看到了一些问题。第一个问题是get()函数需要一个完全指定的ducument路径,类似于:

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

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

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

service cloud.firestore {

      match /databases/{database}/documents {

        match /tenancies/{tenancyID}{

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

    }

}
 类似资料:
  • 在Firestore中,我有一个拥有所有者的项目集合。 所有者可以是用户,应该允许用户读取其文档。 使用可以执行以下操作: 但是对于引用字段,在涉及安全规则时似乎没有任何文档。 我尝试了以下安全规则: 并如下所示进行查询: 但我仍然缺少或权限不足。

  • null 基本上数据结构如下所示: 问题是,我应该写什么安全规则来允许用户只在他们所属的组中(拥有组密钥)读取、创建和更新数据?同时,如何禁止用户找出其他群组的密钥?

  • 获取错误: OnSnapshot中未捕获的错误:FirebaseError:权限缺失或不足。 下面是正在调用的函数: Firebase安全规则如下: 奇怪的是,它仍然正确地显示一切,只是触发了这个错误。为什么会这样?我忽略了吗?

  • 最近我收到了一系列Firebase通知,涉及: [Firebase]您的Cloud FiRecovery数据库有不安全的规则 我们检测到您的安全规则存在以下问题:任何用户都可以写入您的整个数据库。因为您的项目没有强大的安全规则,任何人都可以访问您的整个数据库。攻击者可以窃取、修改或删除您的数据,并会抬高您的账单` Edit2:我需要的是允许每个人都写,而不需要登录,但是只有管理员帐户应该能够从Fi

  • 问题是我不能使用具有这些规则的查询,因为(我发现)无法根据子集合是否包含某个文档进行查询。这意味着我不能列出某个用户所属的所有组。我尝试在作为一部分的映射中列出所有用户,但我无法设置谁可以编辑文档的某些部分的权限,因此这也不起作用。 编辑:据我所知,查询必须以某种方式与规则匹配,否则权限将被拒绝。如何创建一个查询来收集某个用户所在的所有组并满足此规则。

  • 每个食谱文档包含三个内容。一个名为的字段,其中存储菜谱的名称;一个名为的字段,其中存储创建者uid的,以及一个名为的子集合,其中包含带有一些随机字段的文档。 问题是,使用这些规则只能创建菜谱文档。子集合及其文档不会创建,因为db表示 FirebaseError:[code=permission-denied]:缺少权限或权限不足。FirebaseError:缺少权限或权限不足。