Firestore 安全规则 - 找不到功能存在

时间:2021-04-30 18:21:20

标签: 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: 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无效,但为什么呢?它只是一个字符串,不是吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

没有选项可以让用户成为管理员并在实时数据库中授予特殊权限,我认为 FireStore 也是如此。

但是您可以做的是在用户中添加一个字段,例如 userType,并在管理员注册时为其赋予值 Admin,随后您可以根据该字段创建规则。