是否需要为每个子集合明确定义安全规则?

时间:2019-03-14 07:41:15

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

考虑Firebase文档中的示例

select id_acc, model, value, actual
from models
  unpivot (value for model in (model_1 as 'Model 1', 
                               model_2 as 'Model 2', 
                               model_3 as 'Model 3'));

地标子集合具有明确的安全规则。假设我在城市下还有其他子集合。如果我想要的规则与城市的规则相同,是否需要像 landmarks 一样将它们定义为单独的块?或者我可以将service cloud.firestore { match /databases/{database}/documents { match /cities/{city} { allow read, write: if <condition>; // Explicitly define rules for the 'landmarks' subcollection match /landmarks/{landmark} { allow read, write: if <condition>; } } } } 更改为/cities/{city}吗?

哪种方法最好?谢谢您的宝贵时间。

1 个答案:

答案 0 :(得分:0)

从您的问题来看,我认为您有两个子集合,地标和大写字母;因此,您需要为子集合“地标”使用不同的规则。要实现此目的,您必须明确定义每个子集合的安全规则。

您的规则应该是这样的

service cloud.firestore {
match /databases/{database}/documents {
match /cities/{city} {
  allow read, write: if <condition>;

    // Explicitly define rules for the 'landmarks' subcollection
    match /landmarks/{landmark} {
      allow read, write: if <condition>;
    }

 // Explicitly define rules for the 'capital' subcollection
    match /capital/{capitals} {
      allow read, write: if <condition>;
    }
}
}
}

如果您编写这样的规则

service cloud.firestore {
match /databases/{database}/documents {
match /cities/{city=**} {
  allow read, write;
}
}
 }

即使您明确为某些子集合编写规则,此规则也将适用于city集合中的每个子集合。