Не удается получить правила Firestore get () для работы внутри функции - PullRequest
0 голосов
/ 04 июля 2019

Firestore не работает с get внутри функции

У меня есть это правило

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

    function isProjectOpenForAssign() {
      return get(/databases/$(database)/documents/projects/$(anyProject)).data.canAssignTask == true;
    }

    match /projects/{anyProject} {
      allow create: if request.auth != null;

      match /tasks/{anyTask} {
        allow create: if request.auth != null && (isProjectOpenForAssign());
      }
    }
  }
}

При запуске симулятора при его тестировании я получаю:

Ошибка запуска симуляции - Ошибка: строка simulator.rules [23], столбец [14].Функция не найдена ошибка: Имя: [получить] .;Ошибка: указан неверный аргумент для вызова.Функция: [get], Аргумент: ["|| invalid_argument ||"]

1 Ответ

1 голос
/ 04 июля 2019

Проблема в том, где вы определяете свою функцию.Поскольку вы определяете isProjectOpenForAssign на том же уровне, что и это совпадение match /projects/{anyProject}, функция не будет иметь доступа к anyProject.

. Существует два решения:

  1. Передать anyProject в качестве параметра isProjectOpenForAssign.

    function isProjectOpenForAssign(anyProject) {
      return get(/databases/$(database)/documents/projects/$(anyProject)).data.canAssignTask == true;
    }
    
    match /projects/{anyProject} {
      allow create: if request.auth != null;
    
      match /tasks/{anyTask} {
        allow create: if request.auth != null && (isProjectOpenForAssign(anyProject));
      }
    }
    
  2. Определить функцию внутри совпадения, которая объявляет anyProject.

    match /projects/{anyProject} {
      function isProjectOpenForAssign() {
        return get(/databases/$(database)/documents/projects/$(anyProject)).data.canAssignTask == true;
      }
    
      allow create: if request.auth != null;
    
      match /tasks/{anyTask} {
        allow create: if request.auth != null && (isProjectOpenForAssign());
      }
    }
    
...