2017-10-08 67 views
1

In Cloud Firestore規則 - 我有一個文檔,名爲task,我想查看某些數據(assignee字段)是否爲空/不存在。在雲Firestore規則中 - 如何檢查密鑰是否爲空

我已經試過:

  1. resource.data.assignee == null - 不工作(錯誤)
  2. !resource.data.hasAll(['assignee']) - 不工作(錯誤)

從文檔 - 它指出,這確實創建一個錯誤: // Error, key doesn't exist allow read: if resource.data.nonExistentKey == 'value';

+0

以下是完整的規則文件 - https://github.com/Metaburn/doocrate/blob/master/firestore.rules 據我所知'resource'是一個文檔,因爲我使用'匹配/任務/ {anyTask} {' 從資源上的firebase文檔 - https://firebase.google.com/docs/firestore/reference/security/#resource_1 –

+0

我不需要檢查文檔 - 我知道文檔在那兒。 我想檢查該文檔中的字段。 因此對於'/ tasks/my-task' - 'tasks'是集合。 'my-task'是文件。並且裏面有一個字段'assignee' - 我想看看它是否爲空,我不能 –

+0

有一個'resource.data.keys()'函數,嘗試使用'hasAll(['assignee'] )'而不是。 – Callam

回答

5

閱讀Firestore安全規則的列表比較如果所有值都存在於列表中,則可以看到hasAll返回true。

// Allow read if one list has all items in the other list 
allow read: if ['username', 'age'].hasAll(['username', 'age']); 

request.resource.data是包含的字段和值的映射圖。爲了使用hasAll,我們必須首先獲得鍵值,如here所示的值列表。

!resource.data.keys().hasAll(['assignee']) 
+0

應該'!('asignee'in resource.data.keys())'也工作嗎?另外需要注意的是,從規則文檔: 「請求中沒有提供的資源中的字段被添加到'request.resource.data'。規則可以通過比較'request'來測試字段是否被修改。 resource.data.foo'知道'resource.data.foo'知道'resource'中的每個字段也將出現在'request.resource'中,即使它沒有在寫請求中提交。「,所以可能有密鑰存在的時間,你不期待它... – menehune23

相關問題