Могу ли я использовать в базе данных Firebase правила "get" для db? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь защитить свои файлы Firebase (облачное хранилище Google) на основе пользовательских данных.В Firestore я использую правило, основанное на получении содержимого базы данных (найдите uid в таблице пользователей и сопоставьте поле), и это работает нормально.Я пытаюсь использовать те же правила в хранилище Firebase, но в симуляторе я получаю Error: simulator.rules line [12], column [17]. Function not found error: Name: [get].; Error: Invalid argument provided to call. Function: [get], Argument: ["||invalid_argument||"].Мои правила выглядят так:

  match /b/{bucket}/o {
    function isAuth() {
      return request.auth != null && request.auth.uid != null
    }
    function isAdmin() {
      return isAuth() &&
      "admin" in get(/databases/$(database)/documents/users/$(request.auth.uid)).data.roles;
    }
    function clientMatch(client) { // expects user's "client" field to be ID of client
      return isAuth() &&
      client == get(/databases/$(database)/documents/users/$(request.auth.uid)).data.client;
    }
    match /P/Clients/{client}/{allPaths=**} {
      allow read, write: if isAdmin() || clientMatch(client);
    }
  }
}

Строка 12 начинается с client == get в clientMatch().Я не смог сказать, поддерживаются ли эти функции только для правил Firestore (db), или они также должны работать для хранилища.

Если это не сработает, каковы мои варианты?Как люди ищут пользовательские данные для безопасности хранилища Firebase?

1 Ответ

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

В настоящее время вы не можете ссылаться на документы Firestore в Правилах хранения.Если вы хотите, чтобы это было функцией правил хранения, отправьте запрос функции .

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

...