虽然看起来很简单,但我仍然在努力设置一些基本的Firestore规则,这些规则没有按预期工作。
对于下面发布的方案和查询,使用此数据库:
情景1
无法确定数据库名称?我认为它是restaurants
,但有了这个假设,下面的代码不起作用,并且获得PERMISSION_DENIED
例外:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if database == "restaurants";
}
}
}
场景2
收集餐馆有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'] ;
}
}
}
这两个可能不是非常实用的场景,但更多的是我的理解。
答案 0 :(得分:1)
在您的第一个示例中,database
是数据库的名称,可能类似于“(默认)”。
在您的第二个示例中,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; ;
}
}
}