gpt4 book ai didi

firebase - 消防站;安全规则模拟通过但实际失败(uid 作为映射键)

转载 作者:行者123 更新时间:2023-12-01 04:33:22 24 4
gpt4 key购买 nike

我不明白为什么这个 Firestore 安全规则在 web.xml 中失败了。

我正在使用 @angular/fire latest 查询集合和 firebase latest,但它在模拟中工作。

service cloud.firestore {
match /databases/{database}/documents {
// Match any document in the 'cities' collection
match /events/{event} {
allow read: if (resource.data.access.code == 'public' || (resource.data.access.code == 'protected' && resource.data.objname.objfield == "A"));
}
}
}

这是数据:

enter image description here

如果 access.code 是“ protected ”,那么我们看 objname.objfield == "A"。
检查 access.code == "protected"可以让我访问数据,但第二部分 objname.objfield == "A"不能。

我不明白为什么。
我已经确保该属性存在于集合的所有对象中。 ( Firestore security rules based on map values )

我尝试了几种不同的方法,它们都通过Simulation,因为它是单个文档查询。
集合级别的实际查询不通过实际 Web 调用的权限。

这是我正在做的查询,当没有安全规则时它会通过
const pathAccessCode: firebase.firestore.FieldPath = new firebase.firestore.FieldPath('access', 'code');
const eventsUser: AngularFirestoreCollection<any> = this.firestore.collection('events', ref => ref.where(pathAccessCode, '==', 'protected'));
const eventsUser$: Observable<any> = eventsUser.valueChanges();
eventsUser$.subscribe(data => console.log(data) );

如你看到的;某些属性被规则 (access.code) 识别,但其他属性 (objname.objfield) 不能识别。

我现阶段唯一能想到的就是 access.code 在我开始玩规则之前就已经创建好了 .
然而,objname.objfield 是在我开始使用规则后创建的。

这可以是一回事吗?

谢谢你的帮助

最佳答案

在询问 Firebase 支持后,我被告知在查询上下文中,安全规则必须与查询本身匹配。

那是;如果我想在 fieldA 和 fieldB 上使用过滤器查询文档,那么只有 fieldA 和 fieldB 应该在安全规则中。

然而,这不是我想在这里实现的目标。

希望能帮助任何有同样问题的人。

关于firebase - 消防站;安全规则模拟通过但实际失败(uid 作为映射键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52320227/

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