Правила безопасности Firestore Multiple get () не работает должным образом - PullRequest
0 голосов
/ 05 сентября 2018

Вот мои правила безопасности в пожарном депо:

service cloud.firestore {
  match /databases/{database}/documents {
    match /collectionA/{someID} {
         function checkA() {
            return get(/databases/$(database)/documents/collectionA/$(someID)/users/$(request.auth.uid)).data.deleteFlag != true
         }
         function checkB() {
            return get(/databases/$(database)/documents/collectionB/$(request.auth.uid)/companies/$(someID)).data.deleteFlag != true
         }
         allow read, write: if  checkA() || checkB()
    }
  }
}

А это мои объекты базы данных:

project {
  collectionA {
    companyA {
      users {
        r9Myn4TfzAVpSZGzyaet {
          deleteFlag: false
        }
      }
    }
  }
  collectionB {
    aAzUlfztdYdEIXT3Tva73kCiuy93 {
      companies {
        companyA{
          deleteFlag:false
        }
      }
    }
  }
}

И я попробовал симулятор:

simulation type : get
location        : collectionA/companyA
provider        : password
Firebase UID    : aAzUlfztdYdEIXT3Tva73kCiuy93

Я ожидал, что эти правила безопасности вернут "true". Потому что я думал, что checkA вернул «false», а checkB вернул «true». Но они вернули «ложь».

Пожалуйста, дайте мне знать, если у вас есть какие-либо идеи или предложения.

1 Ответ

0 голосов
/ 21 сентября 2018

Я слышал, что симулятор иногда не работает должным образом. Я бросил запрос от клиента и проверил его, и он работал правильно. Поэтому я подумал, что это ошибка в симуляторе. Однако я получил следующий ответ от службы поддержки платформы разработчика.

FYI

Функция get получит ошибку, если попытается получить значение для объект, который не существует. Когда ошибка возникает в условии Суждение, правило безопасности не применяется в правиле безопасности. Из-за спецификаций правил безопасности невозможно управление несуществующими объектами

...