【问题标题】:How to setup Firestore security rules correctly如何正确设置 Firestore 安全规则
【发布时间】:2017-11-09 13:41:15
【问题描述】:

虽然看起来很简单,但我仍然在努力设置一些基本的 Firestore 规则,这些规则没有按预期工作。

对于下面发布的场景和查询,使用此数据库:

场景 1

无法找出数据库名称?我以为是restaurants,但是在这个假设下,下面的代码不起作用,并得到PERMISSION_DENIED 异常:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if database == "restaurants";
    }
  }
}

场景 2

Collection Restaurants 有 10 个文件,如上图所示,我已经硬编码了这 10 个文件,并允许它们如下读写,但它不起作用,并且得到相同的 PERMISSION_DENIED 异常:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {

     allow read : if document in ['2uFMIc2BSH6oslxEABpB','8GMNVxVUb1HzRAk2QmmX',
      'AryyMURod8AeWAfBVavF','AvnpKGMeUWDSfowFLpwa','H0qi7gI8WmSVobu19G49',
      'H2xhfoj0Rn75BH9nnbuI','NRfgppqWRfj3DtHDlft4','R9gZ0hTxCPXwSeV2prNV',
      'YgXXwndeIfZx6rUhdlc4','v22FlL7LBBY851N8sIvQ'] ;

      allow write : if document in ['2uFMIc2BSH6oslxEABpB','8GMNVxVUb1HzRAk2QmmX',
      'AryyMURod8AeWAfBVavF','AvnpKGMeUWDSfowFLpwa','H0qi7gI8WmSVobu19G49',
      'H2xhfoj0Rn75BH9nnbuI','NRfgppqWRfj3DtHDlft4','R9gZ0hTxCPXwSeV2prNV',
      'YgXXwndeIfZx6rUhdlc4','v22FlL7LBBY851N8sIvQ'] ;


    }
  }
}

这2个可能不是很实际的场景,但更适合我的理解。

【问题讨论】:

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


    【解决方案1】:
    1. 在您的第一个示例中,database 是您的数据库的名称,可能类似于“(默认)”。

    2. 在您的第二个示例中,document 将是您文档的完整路径;这就是=** 通配符的作用——它是一种“我的路径中的所有其他东西”类型的通配符。所以它等于restaurants/2uFMIc2BSH6oslxEABpB

    如果您想创建一条规则,“用户可以阅读我的餐馆集合中的任何文档”,您需要这样的内容:

    service cloud.firestore {
      match /databases/{database}/documents {
        match /restaurants/{restaurantID} {
          allow read, write: if true;
        }
      }
    }
    

    如果您想对各个餐厅的文档 ID 做一些有趣的事情,您可能想做更多类似的事情:

    service cloud.firestore {
      match /databases/{database}/documents {
        match /restaurants/{restaurantID} {
          allow read, write: if restaurantID == '2uFMIc2BSH6oslxEABpB; ;
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-09-15
      • 2021-12-02
      • 1970-01-01
      • 2019-04-26
      • 2019-09-20
      • 1970-01-01
      • 2018-10-19
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多