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

消防安全规则“get()”不起作用?

公孙联
2023-03-14

我有一个Firestore集合,结构如下:/database/{database}/documents/group/{group}/...

group: {
    members: [
        "user01",
        "user02",
    ]
}
Firestore.firestore().collection("group").whereField("members", arrayContains: Auth.auth().currentUser.uid)
            .addSnapshotListener {...
match /group/{group}/{document=**} {
    allow read: if request.auth.uid != null;
}

但是,当我试图保护集合以只允许上面的快照(而不是对集合中其他文档的请求)时,我的权限是不正确的。这是我尝试过的:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /group/{group}/{document=**} {
      allow read: if request.auth.uid in get(/database/$(database)/documents/group/$(group)).data.members || request.auth.uid in get(/database/$(database)/documents/group/$(group)).members;
    }
  }
}

我也试过:

match /group/{group} {
    allow read: if request.auth.uid in resource.data.members;
}

它似乎有效,但不允许我访问文档的子集合。我需要get()rules方法才能工作。

match /group/{group} {
    allow read: if request.auth.uid in resource.data.members;
    match /child_collection/{document=**} {
        allow read: if request.auth != null;
    }
}

在我列出答案之前,我会给一些时间,以防更有经验的人有更好的解决方案。

共有1个答案

东方震博
2023-03-14

在阅读了更多文档后,该解决方案似乎有效:

match /group/{group} {
    allow read: if request.auth.uid in resource.data.members;
    match /child_collection/{document=**} {
        allow read: if request.auth != null;
    }
}

如果有人使用get()对解决方案进行了输入,这也将非常有帮助!

 类似资料:
  • 我重新安排了云firestore的安全规则,以防止在集合中重新创建文档。以下是我使用的规则: 我用这些文档路径和用户凭据在控制台中模拟了这些规则 如果我创建了一个id为09-07-2020的文档,并使用上述路径进行模拟,则会失败。当我删除文件09-07-2020时,上述模拟工作正常。因此,它在规则模拟器中运行良好。 但当我在应用程序中尝试时,每次尝试都会再次创建文档。因此,如果文档内容以前不同,则

  • 我最近收到一封来自Firebase的电子邮件,告诉我我的数据库(FiRest)的规则不安全,所以我将它们更改为以下内容: 在我有这些规则之前: 在做出改变后,电子邮件不断地回来,我不知道还能做什么。我已经尝试了以下链接中给出的几个选项,但它们都不能满足我的需要。 https://firebase.google.com/docs/rules/insecure-rules#firestore 我需要授

  • 我需要一些帮助来制定我的消防安全规则。 以下是我的firestore规则:

  • 更新: 如果我使用注释和路径:/*和/api/*-site可以很好地工作。但是因为我使用全局静态IP,所以我不能为每个IP创建一个以上的入口。如果我使用-site返回错误:

  • 我正在尝试设置Firebase规则,如果$uid等于auth,则该规则将授予对R/W的访问权限。uid。我用firebase phone auth登录。 我正在尝试这条规则: 这条规则: 我尝试访问数据时出错(权限被拒绝)。 我遵循Firebase的说明,此规则通过模拟器。 当这些规则到位时,我不会从Firebase获得带有快照的实例。 如果你能帮助解决这个问题,我将不胜感激。 我正在尝试授予读取

  • 简单介绍一下,我正在尝试了解Firebase安全协议,我已经建立了一个名为UsersDB的数据库,该数据库将根据身份验证存储详细信息。uid。详细信息包括全名、电子邮件、提供商、帐户创建日期、上次登录日期。 我设置了如下规则: 我的理解是,记录只能由user_id符合auth.uid.的人读写 我的问题是我做得对吗?如果不对,我应该如何实现这一目标?我只希望创建帐户的人能够读写这个,而没有其他ui