gpt4 book ai didi

javascript - Cloud Firestore 权限

转载 作者:行者123 更新时间:2023-11-30 14:13:05 26 4
gpt4 key购买 nike

我在我的 Cloud Firestore 中配置了以下权限,但我在项目可视化方面遇到了一些问题。

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() 正常工作。

我的数据具有按预期配置为 booleanpublished 属性,并且除了一个以外的所有属性都被检查为 true。没有显示任何内容,浏览器中出现此错误:

core.js:14597 ERROR Error: Missing or insufficient permissions.

有人知道如何解决这个问题吗?

顺便说一下,我的代码基于文档:https://firebase.google.com/docs/firestore/security/rules-query#evaluating_constraints_on_queries

这是我尝试读取的数据示例: enter image description here

我的 Angular 服务的构造函数获取页面列表:

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;
}

最佳答案

您正在尝试阅读您的规则不允许的所有文档。请记住,安全规则不会过滤文档。他们只是确保读取操作符合规则,而在您的情况下则不符合。

这意味着您需要通过仅请求已发布的文档来复制查询中规则的逻辑:

ref.where('published', '==', true).orderBy('order', 'asc')

有关此的更多信息,请参阅:

关于javascript - Cloud Firestore 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com