小编Gee*_*Lad的帖子

Firestore 规则在尝试读取 Resource.data 值时无法尝试列出集合

简单场景:

  • 我有一个名为“foo”的集合
  • 它有一个 ID 为“bar”的文档
  • “bar”有一个名为“sample”的字符串字段,其值为“fail”

如果我在我的规则集中尝试这样的事情:

  service cloud.firestore {
    match /databases/{database}/documents {
      // Test rule
      match /foo/{id} {
        allow read: if resource.data.sample == 'fail';
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

当我在查询中指定文档 ID 时,它可以在“bar”上进行查询,但如果我尝试列出所有项目,查询将返回“缺少或权限不足”。我也尝试过allow read: if get(/databases/$(database)/documents/foo/$(id)).data.sample == 'fail';,得到了相同的结果。

集合中只有一条记录,当我引用数据 ID 时,我可以单独查询它。据我所知,为了查询正常工作,过滤条件需要匹配规则。在本例中,我没有应用任何过滤器,但应返回所有 (1) 条记录。

我很难找到解决方案。我见过的所有解决方案都说查询结果需要匹配规则,在这种情况下它们应该匹配。

firebase firebase-security google-cloud-firestore

6
推荐指数
1
解决办法
793
查看次数

Chrome扩展程序:在background.html中访问跨域iframe

由于页面的复杂性,我正在尝试编写一个扩展,该扩展刮取需要作为网页加载的网站(XHR并不是真正的选择)。我想出的最好的解决方案是通过放置在background.html中的iframe进行抓取。当满足目标页面上的某些条件时,该扩展将向用户提供通知。

几年前在这里发布了一个非常类似的问题:

Chrome扩展程序:加载隐藏的页面(不带iframe)

我可以通过删除x-frame-options标头在后台页面中将iframe与目标页面一起加载,如对上述问题的回答所示。当页面加载到浏览器选项卡/窗口中时,我可以通过内容脚本抓取数据。但是,我希望能够从后台脚本执行此操作,并且由于跨域安全性的原因,它当然不能直接访问iframe contentDocument。

不幸的是,尽管iframe很好地从目标页面加载了内容,但它没有加载内容脚本。似乎background.html根本没有加载任何内容脚本。这是有道理的,因为当扩展开始加载彼此的内容脚本时,事情可能会变得疯狂。

是否有清单选项允许特定的内容脚本在后台页面的iframe中运行?

如果不是,是否有任何方法可以放松扩展中访问iframe contentDocument的跨域安全性?

请注意,不能使用--disable-web-security chrome命令行开关。我希望非技术人员能够使用该扩展程序,并且我不想要求用户禁用网络安全性才能使用该扩展程序。

如果无法在后台页面中运行内容脚本或放松安全性,还有什么其他可能性可以在不使用XHR的情况下抓取带有chrome扩展名的页面DOM?当然一定有办法。

javascript iframe google-chrome google-chrome-extension

5
推荐指数
0
解决办法
2156
查看次数