Как передать дополнительные параметры аутентификации для аутентификации правил пожарного депо (React-Native)? - PullRequest
0 голосов
/ 22 октября 2018

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

Поскольку я использую базу данных Firestore с React-Native, я только передаю информацию документа соответствующей коллекции при вставке / обновлении.Итак, как я могу передать информацию о роли пользователя вместе с этим, чтобы мое правило проходило проверку подлинности и чтобы данные не попадали в другую коллекцию.

Один пример, изображающий сценарий выше:

/collection1/document1
{
   prop1: value1,
   prop2: value2,
   role: "WRITE"
}

/collection1/document2
{
   prop1: value1,
   prop2: value2,
   role: "READ"
}

Теперь учтите, что текущий зарегистрированный пользователь - document2.

У меня есть другая коллекция:

/collection2/doc1
{
   userRef: document1, //this is id of document1 from collection1
   ...
}

Я хочу настроить правило firestore для collection2, чтобы, если запрос пришел от пользователя с role="WRITE" затем разрешите только обрабатывать / обновлять документы.

Прочитал много статей и способов, но ни один из них не удовлетворяет этому варианту использования.

Любая помощь будет принята.

1 Ответ

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

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /collection2/{doc} {
     allow read: if getUserRole() === 'READ' || getUserRole() === 'WRITE';
     allow create: if getUserRole() === 'WRITE';
     allow update: if getUserRole() === 'WRITE';
    }
    function getUserRole() {
        return get(/databases/$(database)/documents/collection1/$(request.auth.uid)).data.role;
    }
  }
}
...