Почему данные извлекаются из Firestore, хотя выдают ошибку, что разрешения недостаточны? - PullRequest
1 голос
/ 21 января 2020

Я выполняю запрос 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. Это приводит к той же ошибке, но не дает данных (то есть все в порядке, как должно быть в этом случае).

...