Использование электронной почты пользователя в правилах Firestore? - PullRequest
0 голосов
/ 28 февраля 2020

В базе данных firestore я использую электронную почту только как аутентификацию. База данных имеет следующую структуру:

companies
jobs
users

Для удобства чтения (и для удобства клиентов) я использую адрес электронной почты в качестве идентификатора документа для коллекции users. Документ user выглядит следующим образом:

document id: tbogard@gmail.com
fields
  name_first: Terry
  name_last: Bogard
  jobs_read: ["job_A"]
  jobs_readwrite: ["job_B, job_C"]

Когда я пытаюсь получить токен запроса в правилах, он выдает ошибки (поиск ***):

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    // Helper functions
    function userExists(){ 
      // *** Function not found error: Name: [exists]. ***
      return exists(/databases/$(database)/documents/users/$(request.auth.token.email));
    }
    function userData(){
      // *** Function [get] called with malformed path: /databases/(default)/documents/users/ ***
      return get(/databases/$(database)/documents/users/$(request.auth.token.email)).data;
    }

    // For now, let's keep it simple, and enforce the User read/readwrite rules on Jobs.
    match /jobs/{jobId}{
      allow read: if userExists() && (jobId in userData().jobs_read || jobId in userData().jobs_readwrite);
      allow write: if userExists() && jobId in userData().jobs_readwrite;
    }

    // Only allow Users to see their own profile and companies they belong to.
    match /companies/{companyId}{
      allow read: if userExists() && userData().email in resource.data.employees;
      allow write: if false;
    }
    match /users/{userId}{
      allow read: if userExists() && userData().email == resource.data.email;
      allow write: if false;
    }
  }
}

Я думаю, request.auth.token.email возвращает что-то вроде необязательного? Я не могу найти ничего в документации , объясняющей, как функции get/exists, требующие пути, справляются с этим. Есть ли способ, которым я мог бы сделать UID Firestore для каждого пользователя адресом электронной почты вместо случайной строки, или я могу как-то исправить эти правила?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...