【问题标题】:Firebase: Doubts about delete ruleFirebase:对删除规则的怀疑
【发布时间】:2020-05-27 22:47:18
【问题描述】:

我正在尝试使用 Firebase 模拟器测试我的删除规则,并且我想确保我做得很好。

规则:

match /categories/{document=**} {
  allow delete: if get(/databases/$(database)/documents/categories/$(document)).data.isActive == false;
}

当我使用 /categories/xrzoUrdHZ0w9TJO38PiK 对其进行测试时,它似乎可以正常工作,因为该类别具有字段 'isActive' == false。

但我不确定 - $(document).它不应该是 $(request.resource.data.id) 或类似的东西吗?

【问题讨论】:

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


    【解决方案1】:

    根据您声明的上述规则,您正在检查来自云 Firestore 中存在的数据的标志,而不是来自用户请求数据。

    此外,您正尝试从 Firestore 再次读取同一个文档,因为在删除文档期间它会花费您 1 次读取操作。仅当您要验证来自不同文档的数据时才应使用上述方法

    安全规则可以访问新数据(用户请求)和云中存在的数据

    //checking flag from user requested data
    request.resource.data.isActive
    //checking flag from data present in document in cloud firestore
    resource.data.isActive
    

    如果用户请求的数据 isActive 为 false,则使用以下规则允许删除

    match /categories/{document=**} {
      allow delete: if request.resource.data.isActive == false;
    }
    

    如果文档中存在的数据中的 isActive 标志为假,则以下规则允许删除

    match /categories/{document=**} {
      allow delete: if resource.data.isActive == false;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多