Firebase Firestore安全规则-未找到函数存在

Firebase Firestore安全规则-未找到函数存在,firebase,google-cloud-firestore,firebase-authentication,firebase-security,Firebase,Google Cloud Firestore,Firebase Authentication,Firebase Security,我正在开发一个应用程序,它使用Firestore作为数据库。我有一个管理员集合,其中文档的id是管理员的电子邮件地址。我想创建一个安全规则,它只允许管理员创建新文档。我当前的解决方案如下所示: rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{collectionName}/{document=**} { allow create:

我正在开发一个应用程序,它使用Firestore作为数据库。我有一个管理员集合,其中文档的id是管理员的电子邮件地址。我想创建一个安全规则,它只允许管理员创建新文档。我当前的解决方案如下所示:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{collectionName}/{document=**} {
      allow create: if exists(/databases/$(database)/documents/admins/$(request.auth.email));
    }
  }
}
但是当我尝试运行管理应用程序时,它会给出一个缺少或权限不足的错误。此外,当我试图在规则操场上测试它时,它会给出以下错误:

Error running simulation — Error: simulator.rules line [6], column [24]. Function not found error: Name: [exists].; Error: Invalid argument provided to call. Function: [exists], Argument: ["||invalid_argument||"]

据我所知,exists函数不知何故丢失,文档id无效,但为什么呢?它只是一个字符串,不是吗?

在实时数据库中没有设置用户管理员和授予特权的选项,我认为FireStore也一样


但是,您可以在user like userType中添加一个字段,并在管理员注册时将其值设为Admin,随后您可以根据该值创建规则。

如果您试图获取与身份验证请求相关联的电子邮件,您必须这样做:
$(request.auth.token.email)
。 您可以查看
Request.auth
对象结构的详细信息。

尝试以下操作:
$(Request.auth.email).data