В моем облачном хранилище огней настроены следующие разрешения, но у меня возникают некоторые проблемы с визуализацией моих предметов.
service cloud.firestore {
match /databases/{database}/documents {
match /users/{document=**} {
allow read;
}
match /pages/{pageid} {
// Returns true if the user is logged
function isSignedIn() {
return request.auth != null;
}
// Returns true if the logged user is admin
function isAdmin() {
return isSignedIn()
&& get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
}
// Returns true if the requested page has published marked as true (or should, at least :( )
function isPublished() {
return resource.data.published == true;
}
allow read: if isPublished() || isAdmin();
allow write: if isAdmin();
}
}
}
Я не могу заставить isPublished()
работать правильно. Контент отображается не так, как должно быть. isAdmin()
работает правильно.
Мои данные имеют свойство published
, настроенное как boolean
, как и ожидалось, и все они, кроме одного, отмечены как true
. Ничего не отображается, и эта ошибка появляется в браузере:
core.js:14597 ERROR Error: Missing or insufficient permissions.
У кого-нибудь есть идеи, как это исправить?
Кстати, мой код основан на документации: https://firebase.google.com/docs/firestore/security/rules-query#evaluating_constraints_on_queries
Вот пример данных, которые я пытаюсь прочитать:
И конструктор моей Angular Service получает список страниц:
constructor(
public afs: AngularFirestore) {
this.pagesCollection = this.afs.collection('pages', ref => ref.orderBy('order', 'asc'));
this.pages = this.pagesCollection.snapshotChanges().pipe(
map(changes => {
return changes.map(a => {
const data = a.payload.doc.data() as Page;
data.id = a.payload.doc.id;
return data;
})
})
);
}
getPages(){
return this.pages;
}