Firebase Firestore如何检查集合以允许写入(规则)

Firebase Firestore如何检查集合以允许写入(规则),firebase,firebase-realtime-database,firebase-authentication,google-cloud-firestore,Firebase,Firebase Realtime Database,Firebase Authentication,Google Cloud Firestore,我在Firestore中使用一个名为“admin”的集合来定义哪些用户可以编写新文档(下图) 目前,它仅由软件控制。我想向Firestore添加规则。我试过下面的规则,但不起作用。在这种情况下,正确的规则是什么 service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read: if request.auth != null;

我在Firestore中使用一个名为“admin”的集合来定义哪些用户可以编写新文档(下图)

目前,它仅由软件控制。我想向Firestore添加规则。我试过下面的规则,但不起作用。在这种情况下,正确的规则是什么

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if request.auth != null;
      allow write: if get(/admin/{anyDocument}).data.userId == request.auth.uid;
    }
  }
}

我建议使用
users
集合,集合中有一个
admin
字段,该字段可以设置为
true
/
false
。然后,您可以执行以下操作:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if request.auth != null;
      allow write: if get(/users/${request.auth.uid}).data.admin == true;
    }
  }
}

我建议使用一个
users
集合,其中包含一个
admin
字段,该字段可以设置为
true
/
false
。然后,您可以执行以下操作:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if request.auth != null;
      allow write: if get(/users/${request.auth.uid}).data.admin == true;
    }
  }
}

据我所知,这是不可能与您当前的数据库结构。因为在firestore规则中无法访问按键,除非在
admin
节点中使用

一种方法是将
admin
及其
uid
保存为键,如
admin/userID/data…

现在你可以访问它了

allow write: if get(/databases/$(database)/documents/admin/$(request.auth.uid)).data.userId == request.auth.uid;;

据我所知,这是不可能与您当前的数据库结构。因为在firestore规则中无法访问按键,除非在
admin
节点中使用

一种方法是将
admin
及其
uid
保存为键,如
admin/userID/data…

现在你可以访问它了

allow write: if get(/databases/$(database)/documents/admin/$(request.auth.uid)).data.userId == request.auth.uid;;

request.auth.uid
来自何处?如果客户端通过Firebase auth进行身份验证,
request.auth
将在使用Firestore SDK时自动填充。如果我想在特定集合中设置规则,该怎么办?
request.auth.uid
来自何处?如果客户端通过Firebase auth进行身份验证,
request.auth
将在使用Firestore SDK时自动填充。如果我想在特定集合中设置规则,该怎么做