Правила безопасности Firebase с использованием get () в функции вне правила соответствия - PullRequest
0 голосов
/ 16 сентября 2018

Я обнаружил, что использование вызова get () в функции вне правила сопоставления не работает, тогда как помещение его в правило сопоставления работает:

service cloud.firestore {

  // If I put this here, it does not work.
  function isAdmin() {
    return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.permissions.hasAny(['admin']);
  }

  match /myrecord/{property} {
    // If I put the isAdmin() here it works.
    function isAdmin2() {
      return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.permissions.hasAny(['admin']);
    }

    allow write: if isAdmin();
  }
}

Я бы предпочел, чтобы эта функция была на «глобальном» уровне, где я могу получить к ней доступ из всех правил матча. Можно ли это сделать?

1 Ответ

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

Я понял, что могу поставить его после матча на высшем уровне, и он работает как положено:

service cloud.firestore {
 match /databases/{database}/documents {

  // If I put this here, after the top-level match it works
  function isAdmin() {
    return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.permissions.hasAny(['admin']);
  }

  match /myrecord/{property} {
...