firebase - Firestore 查询带有“hasOnly”的规则
问题描述
我有一个 Firestore 规则,如果用户身份验证的自定义声明令牌的“企业”数组包含文档(这是一个数组)的“businessIds”字段中的所有项目,则应该允许用户阅读并编写该文档,如下所示:
match /users/{userId} {
allow read, write: if resource.data.businessIds.hasOnly(request.auth.token.businesses);
}
但是,此规则不允许读/写任何文档。这是我的测试:
it("Allows a marketeer to read all its users", async () => {
...
const mp1UserId = "MP1_user_crm";
const mp1Doc = admin.collection("users").doc(mp1UserId);
await mp1Doc.set({displayName: "MP CRMer for MP1", type: "MP CRMer", businessIds: ["MP1_ID"]});
const marketeerAuth = {uid: "marketeer_user", businesses: ["MP1_ID", "MP2_ID"]};
const db = base.getFirestore(marketeerAuth);
const testRead = db.collection("users")
.where("businessIds", "array-contains-any", marketeerAuth.businesses);
var all = testRead.get();
await base.firebase().assertSucceeds(all); // FAILS HERE
});
我找不到编写满足规则的查询的方法。firebase.firestore.WhereFilterOp中显然没有hasOnly ()运算符。
请注意,它抱怨hasOnly:
FirebaseError:
false for 'list' @ L59, Function not found error: Name: [hasOnly]. for 'list' @ L136
如何编写可以通过安全规则的查询?
更新:
我被要求解释“request.auth.token.businesses”中的内容。带有自定义声明令牌的 Auth 如下(也可以在 Rule Playground 中构建):
"auth": {
"uid": "marketeer_user"
"token": {
"sub": ""
"aud": "hanOnly-sandbox"
"firebase": {
"sign_in_provider": "custom"
}
"businesses": [
"MP1_ID",
"MP2_ID",
]
}
}
“resource.data.businessIds”中的数据如下数据库结构:
解决方案
推荐阅读
- html - Blazor 选择元素我无法设置 ChangeEvent
- liveserver - Live Server:此页面无法正常工作 127.0.0.1
- python - 为什么我的 PyOpenGL 程序中的一切都映射在阴影中?
- java - 如何在mysql和spring-boot中将tinyint映射到整数?
- memory - openstack服务器实时迁移进度卡在大内存实例中重复随机但未完成
- javascript - Angular 8 中 Observablehq 的 D3js 面积图
- python - Jupyter Lab LuxWidget Lab Extension: RuntimeError: npm dependencies failed to install
- javascript - 正则表达式匹配整个连接的字符串
- python - 识别在 QFileDialog 中按下返回键时发出的信号
- api - 在 OpenAPI V3 中使用 Express 在后端下载文件