Безопасность типа списка в правилах безопасности пожарного депо - PullRequest
0 голосов
/ 06 октября 2019

В моих правилах безопасности пожарного хранилища я хочу иметь правило, которое проверяет, все ли элементы списка имеют тип string.

В моих "пользовательских" документах есть поле с именем "friends". Это список строк, которые представляют идентификаторы документов других пользовательских документов. Вот мои текущие правила:

function userIsAuthenticated() {
  return request.auth != null;
}

match /users/{userID} {

  function resourceIsValidUser() {
    return displayNameIsValid();
  }

  function displayNameIsValid() {
    return request.resource.data.displayName is string &&
      request.resource.data.displayName.size() > 0 &&
      request.resource.data.displayName.size() < 17;
  }

  function photoUrlIsValid() {
    return request.resource.data.photoUrl is string;
  }

  function friendsIsValid() {
    return request.resource.data.friends is list;
  }

  function userIsUserOwner() {
    return request.auth.uid == userID;
  }

  allow read: if userIsAuthenticated();
  allow write: if
    userIsAuthenticated() &&
    resourceIsValidUser() &&
    userIsUserOwner();

}

Могу ли я что-нибудь добавить в функцию friendsIsValid(), чтобы список друзей содержал только строковые значения?

1 Ответ

2 голосов
/ 06 октября 2019

В настоящее время нет функции, которая проверяет типы всех элементов массива. Поскольку итерации массива также нет, единственное, что вы можете сделать сейчас, это предсказать размер массива и проверить каждый элемент отдельно, например, array[0] is string && array[1] is string и т. Д.

Команда FirebaseПомните, что для этого могут потребоваться некоторые правила. Это поможет усугубить ситуацию, если вы подадите запрос на добавление с поддержкой Firebase.

...