«Имитация чтения запрещена» ИЛИ «FirebaseError: отсутствуют или недостаточные разрешения» - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь настроить правила разрешения Firestore. Это мои данные, а также мои правила и полезные данные аутентификации.

enter image description here

enter image description here

enter image description here

service cloud.firestore {
  match /databases/{database}/documents {
    match /questions/{questionId} {
      allow create: if isAdmin() && emailVerified();
      allow read: if isAdmin() && emailVerified();
      allow update: if isAdmin() && emailVerified();
      allow delete: if isAdmin() && emailVerified();
    }

    match /users/{userId} {
        allow get: if isOwner(userId) && emailVerified();
    }
  }

  function isAdmin2() {
    return request.auth.uid == 'CoKtrTQEA8P18v0jtcDUt766rVl1';
  }

  function isAdmin() {
    return getUserData().roles.keys().hasAny(['admin']);
  }

  function getUserData() {
    return get(/databases/$(database)/documents/users/$(request.auth.uid)).data;
  }

  function emailVerified() {
    return request.auth.token.email_verified;
  }

  function isOwner(userId) {
    return request.auth.uid == userId;
  }

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

}

{
  "uid": "CoKtrTQEA8P18v0jtcDUt766rVl1",
  "token": {
    "sub": "CoKtrTQEA8P18v0jtcDUt766rVl1",
    "aud": "flying-pigs",
    "email": "myemail@example.com",
    "email_verified": true,
    "phone_number": "",
    "name": "",
    "firebase": {
      "sign_in_provider": "google.com"
    }
  }
}

При попытке прочитать список вопросов isAdmin () будет возвращать false каждый раз, когда isAdmin2 () будет работать нормально, но он жестко задан.

Что мне не хватает?

1 Ответ

0 голосов
/ 03 июня 2019

Как только у меня возникла такая же проблема, я в итоге сделал что-то вроде этого:

function isAdmin(request) {
    return ['admin'] in getUserData(request).roles
}

Убедитесь, что ваши функции получают запрос в качестве параметра, ваши isAdmin и getUserData в настоящее время не получают его. как это помогает

...