firebase - Firebase Firestore:用于全局读取访问的嵌套安全规则
问题描述
这是这篇文章的后续内容:Firebase Firestore 安全规则 - 根据资源读取所有嵌套文档(但它为空)
我很难弄清楚 Firestore 是如何工作的!
所以假设我有这个 Bases 集合:
{
name: "Base 1",
roles : {
user_1: true
}
},
{
name: "Base 2",
roles : {
user_2: true
}
}
我想获取 user_1 在 resource.roles 中的所有 Base。我愿意 :
db.collection('bases').where('roles.user_1', '==', true).get()
而且效果很好。所有服务器端,因此没有人可以尝试更改过滤器:一切都很好。
但是,我想在 Firestore 中使用安全规则强制执行此过滤器。只是要确定!所以我写了:
function hasRole(){
return request.auth.uid in resource.data.roles
}
match /bases/{document=**}{
allow read: if true; // signedIn() && hasRole();
}
match /bases/{baseId}{
// allow read: if signedIn() && hasRole();
allow update, delete: if false && signedIn()
allow create: if signedIn()
}
当我尝试访问规则模拟器中的特定资源但现在我的.get()
方法收到的权限不足时,它可以工作。有趣的是,当我取消注释读入/bases/{baseId}
它时,它的效果很好(/bases/{document=**}
当然,如果我评论的话)。
所以我可以让它工作,但我仍然想了解为什么 {document=**} 规则在模拟器中工作,而不是在我尝试从服务器获取时。
非常感谢你的帮助 :)
PS:我没有找到在模拟器中模拟nodejs .get() 的方法,学习这些东西不是超级方便。任何有关这方面的资源都将被阅读并有所帮助。
解决方案
推荐阅读
- python - 逻辑回归机器学习模型可以在这里工作吗?
- ios - 透明背景变白
- asp.net - ASP。NET Core 从 Razor 视图调用 Web API
- javascript - ReactJS:如何更改 URL 的链接预览?
- regex - 如果字符串中的任何内容与模式检查的内容不同,则正则表达式返回 false
- python - 如何在 Mac 上“limking”python 3 时修复“错误:权限被拒绝@ [此处的文件目录]”
- opengl - Nsight 显示不连续的 OpenGL 像素历史?
- angular - 角路由器订购?
- powerbi - 一组非整数值的中位数显示为整数
- drag-and-drop - 使用自定义指令 Angular6 未在 CdkDragDrop 事件上监听 HostListener