Я выполняю запрос Firestore в Angular 8, который отображается непосредственно на веб-сайте с *ngFor
. Эти данные получены из моей коллекции Firestore "IoTData". Странно то, что я установил правило Firestore для этой коллекции, чтобы только некоторые пользователи могли получить доступ к данным. В то же время , когда данные отображаются в браузере (после завершения загрузки, поскольку данных достаточно много), я также получаю сообщение об ошибке в консоли:
ERROR FirebaseError: «Отсутствует или недостаточно разрешений».
Но почему я получаю ОБА ошибку (которую я хочу), а также данные (которые мне не нужны в случае текущей пользователь)? Я также получаю сообщение об ошибке для пользователей, которые должны иметь разрешения на просмотр данных.
Извлечение моих правил Firestore:
function getRole(role) {
return get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.roles[role]
}
match /databases/{database}/documents {
match /IoTData/{entity} {
allow get, list: if getRole('admin') == true;
}
}
Запрос находится в конструкторе класса:
this.dataCollection = afs.collection<DataItem>('IoTData', ref => ref.where('datetime', '>=', '2020-01-15T09:51:00.000Z').orderBy('datetime','desc'));
this.data = this.dataCollection.valueChanges();
Шаблон:
<tr *ngFor="let data_item of data | async">
<td>{{ data_item.module }}</td>
<td>{{ data_item.datetime }}</td>
</tr>
У меня также есть кнопка для загрузки тех же данных, которые показаны на странице, но там я использую .get
. Это приводит к той же ошибке, но не дает данных (то есть все в порядке, как должно быть в этом случае).