Google cloud firestore 来自不同集合的条件下的Firestore规则

Google cloud firestore 来自不同集合的条件下的Firestore规则,google-cloud-firestore,firebase-security,Google Cloud Firestore,Firebase Security,我有一个Firestore db,它有两个集合:用户和锦标赛。用户具有“参与者”角色和“管理员”角色,并在用户文档中用“isParticipant”和“isAdmin”布尔值表示: /users/{userId}: isParticipant: true isAdmin: true 我为这些集合设置了访问规则,如下所示: service cloud.firestore { match /databases/{database}/documents { match /use

我有一个Firestore db,它有两个集合:用户和锦标赛。用户具有“参与者”角色和“管理员”角色,并在用户文档中用“isParticipant”和“isAdmin”布尔值表示:

/users/{userId}:
  isParticipant: true
  isAdmin: true
我为这些集合设置了访问规则,如下所示:

service cloud.firestore {
  match /databases/{database}/documents {
     match /users/{userId} {
      allow create, read;
      allow update: if request.auth.uid == userId;
    }
     match /tournaments/{tournamentId} {
      allow create, read, update: if request.auth.uid != null;
    }
  }
}
但是,我真正想做的是将锦标赛的创建限制为具有“管理员”角色的用户。我已经在代码中这样做了,但希望增加db规则的安全性,以防止除管理员用户以外的任何人创建锦标赛

是否有方法在规则语法中引用不同集合的数据元素?比如:

     match /tournaments/{tournamentId} {
      allow create: if resources.users.userId.isAdmin == true;
    }
?


提前感谢。

您可以使用
get
功能访问不同集合中的数据:

有关这方面的更多信息,请参阅Firebase文档中的内容,我就是从中获得上述示例的

需要注意的一点是,这需要额外读取文档。如果将用户是管理员这一事实作为自定义声明存储在其配置文件中,则可以从
request.auth
访问它,而无需额外读取。例如

allow delete: if request.auth.token.admin == true

有关详细信息,请参阅文档中的和。

您可以使用
get
功能访问不同集合中的数据:

有关这方面的更多信息,请参阅Firebase文档中的内容,我就是从中获得上述示例的

需要注意的一点是,这需要额外读取文档。如果将用户是管理员这一事实作为自定义声明存储在其配置文件中,则可以从
request.auth
访问它,而无需额外读取。例如

allow delete: if request.auth.token.admin == true

有关详细信息,请参阅文档中的和。

谢谢。我不知道自定义索赔功能。在Firestore控制台的任何地方都可以看到这些声明吗?i、 我是否能够在不必编程的情况下更改声明的值?我不认为这些声明会显示在控制台中,但这将是一个很好的选择。现在,您必须通过AdminSDK或客户端获取它们。谢谢。我不知道自定义索赔功能。在Firestore控制台的任何地方都可以看到这些声明吗?i、 我是否能够在不必编程的情况下更改声明的值?我不认为这些声明会显示在控制台中,但这将是一个很好的选择。现在,您必须通过ADMINSDK或客户端获取它们。