【问题标题】:Firestore security rules - Function exists not foundFirestore 安全规则 - 未找到函数存在
【发布时间】:2021-07-24 02:00:28
【问题描述】:

我正在开发一个使用 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 无效,但为什么呢?这只是一个字符串,不是吗?

【问题讨论】:

  • 试试这个:$(request.auth.email).data

标签: firebase google-cloud-firestore firebase-authentication firebase-security


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 2019-09-21
      • 2018-10-19
      • 2019-07-05
      • 2020-07-03
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多