Недостаточно прав доступа на стороне клиента во время работы симулятора - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующие настройки правил firestore, где я хочу, чтобы кто-нибудь мог создать документ в коллекции предложений, но только определенный пользователь может его обновить.Правила выглядят так:

  service cloud.firestore {
    match /databases/{database}/documents {
      match /suggestions/{sugg} {
        allow create, read;
        allow update: if request.auth.uid == 'abc123';
      }
    }
  }

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

Ошибка: отсутствует или недостаточно разрешений.

В моем приложении я делаюadd() позвоните в коллекцию предложений.Так что в моих правилах, где я указываю allow create, этого должно быть достаточно.Я добавил read на тот случай, если возвращенный документ будет считаться прочитанным.

Клиент: (AngularFire)

this.afs.collection('suggestions').add(sugg).then(() => {
  this.submitted = true;
}, err => console.error('Firebase error:', err));

1 Ответ

0 голосов
/ 26 июня 2018

Проблема заключалась в том, что Firestore не мог попытаться сопоставить uid, когда request.auth был нулевым.Решением было добавить несколько функций:

 service cloud.firestore {
    match /databases/{database}/documents {
      function isSignedIn() {
        return request.auth != null;
      }
      function isAdmin() {
        return isSignedIn() && request.auth.uid == 'abc123';
      }

      match /suggestions/{sugg} {
        allow create, read;
        allow update: if request.auth.uid == 'abc123';
      }
    }
  }
...