Почему я получаю отказ в разрешении в коде моего приложения Firestore, но тест консоли Firestore работает? - PullRequest
0 голосов
/ 26 мая 2020

У меня возникли проблемы с пониманием правил firestore.

Я написал следующие правила в моей базе данных Firestore. Когда я запускаю тест в консоли с использованием идентификатора аутентифицированного пользователя для обновления объекта ресторана, тест проходит успешно. Однако, когда я пытаюсь выполнить этот вызов в Kotlin с помощью SDK, после аутентификации с помощью входа в систему я получаю Permission Denied. Что я пропустил?

    function userIsAdmin(restaurantId) {
      return get(/databases/$(database)/documents/restaurants/$(restaurantId)/users/$(request.auth.uid)).data.role == "Owner";
    }

    match /restaurants/{restaurantId} {
        allow read: if true;
        allow write: if userIsAdmin(restaurantId);
    }

    match /restaurants/{restaurantId}/menus/{menuId} {
      allow read: if true;
      allow write: if true;
    }

    match /restaurants/{restaurantId}/users/{userId} {
      allow read: if true;
      allow write: if true;
    }
  }
}

Пользовательский объект в firestore: User entity on firestore

Запрос в Kotlin:

firestore.collection(COLLECTION_RESTAURANT)
.document("aXTSlGphPbzAXRInHBIg")
.update(KEY_RESTAURANT_NAME, "New restaurant")
.await()

1 Ответ

0 голосов
/ 28 мая 2020

Как упоминал @DougStevenson в комментариях, проблема в том, что вы храните собственные идентификаторы Google Auth вместо идентификаторов пользователей Firebase Auth в своей коллекции users и идентификаторы пользователей Firebase Auth при запросе, из-за этого uid на запрос будет выглядеть как null или undefined и вызовет эти проблемы с разрешениями.

Если вы измените записи firestore для использования идентификаторов пользователей Firebase Auth в своей коллекции users, это решит проблему.

...