2017-10-08 17 views
0

我無法弄清楚如何在Firestore中執行可選屬性。它似乎沒有包含在文檔中,下面的文檔對我沒有幫助。如何在Firestore中鍵入檢查可選屬性

service cloud.firestore { 
    match /databases/{database}/documents { 
    function maybeString(val) { 
     return val == null || val is string 
    } 

    match /myCollection/{document} { 
     function mySchema() { 
     return request.resource.data.name is string 
      && maybeString(request.resource.data.optionalProp); 
     } 

     allow read: if request.auth != null; 
     allow create, update: if mySchema(); 
    } 
    } 
} 


service cloud.firestore { 
    match /databases/{database}/documents { 
    match /myCollection/{document} { 
     function mySchema() { 
     return request.resource.data.keys().hasAll(['name']) 
      && request.resource.data.name is string 
      && request.resource.data.optionalProp is string; 
     } 

     allow read: if request.auth != null; 
     allow create, update: if mySchema(); 
    } 
    } 
} 

回答

0

我現在用的是第二種方案,但你需要使用'fieldName' in resource.data.keys()來檢查​​的存在:

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /myCollection/{document} { 
     function mySchema() { 
     return request.resource.data.keys().hasAll(['name']) 
      && request.resource.data.name is string 
      && (
      ! ('optionalProp' in request.resource.data.keys()) 
      || request.resource.data.optionalProp is string 
     ); 
     } 

     allow read: if request.auth != null; 
     allow create, update: if mySchema(); 
    } 
    } 
}