Перемещение правила безопасности Firestore в правило разрыва пользовательских функций - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть правило безопасности Firestore, которое проверяет, есть ли у пользователя правильный код для доступа к другому документу.

service cloud.firestore {
  match /databases/{database}/documents {
    match /Orgs/{orgID} {
      allow read: if get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.OrgCode == resource.data.Code;
    }
  }
}

Это прекрасно работает.Однако, если я попытаюсь переместить эту проверку в пользовательскую функцию, например, так:

service cloud.firestore {
  match /databases/{database}/documents {
    match /Orgs/{orgID} {
      allow read: if isPartOfOrg();
    }
  }
}
function isPartOfOrg(){
  return get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.OrgCode == resource.data.Code;
}

Затем я начну получать ошибки разрешения.Я ничего не сделал, но перевел логику в функцию, почему это не работает?

1 Ответ

0 голосов
/ 02 февраля 2019

Я понял это, когда писал вопрос.В документах говорится, что функции имеют доступ к переменным и функциям из области, в которой они определены , а не из того места, где они вызываются.

Итак, переместите функциюв блок совпадений, и все снова работает!

service cloud.firestore {
  match /databases/{database}/documents {
    match /Orgs/{orgID} {
      function isPartOfOrg(){
        return get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.OrgCode == resource.data.Code;
      }
      allow read: if isPartOfOrg();
    }
  }
}

Надеюсь, это поможет другим, кто столкнулся с этой проблемой!

...