允许根据文档中的时间戳值读取FireStore规则

Rud*_*udi 5 firebase firebase-security google-cloud-firestore

我想创建一个FireStore规则,在当前日期超过文档中的时间戳值后,将读取特权文件读取到文档.

这适用于博客Web应用程序.EG博主设置了一个博客文章,以便在特定日期向公众开放.

从阅读文档这应该工作,但它没有.

service cloud.firestore {
  match /databases/{database}/documents {
    match /Articles/{article}{
   allow read: if request.time.date() < resource.data.date
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

小智 7

注意:由于这是我在 Stack Overflow 上的第一个答案,因此我不允许对Frank van Pueffelen的答案发表评论,因此请注意,此解决方案的学分是他的!

该请求有一个request.time时间戳,Firestore 允许在timestamp <> timestamp操作中使用基本的数学运算符,所以你request.time < resource.data.date会工作的;)

service cloud.firestore {
  match /databases/{database}/documents {
    match /Articles/{article}{
   allow read: if request.time < resource.data.date
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是根据我2018年9月29日的个人测试得出的


use*_*914 6

尝试将 < 切换为 >。

request.time 将是访问文档的时间,而resource.data.date 应该是文档的创建时间戳。

尝试将其用于您的安全规则:

    allow read: if request.time > (resource.data.timestampPropertyName + duration.time(1, 0, 0, 0));
Run Code Online (Sandbox Code Playgroud)

uration.time(4, 3, 2, 1) 将创建一个四小时三分钟两秒一纳秒的持续时间。

更多信息请访问: https ://firebase.google.com/docs/firestore/reference/security/#timestamp

保存安全规则后请记住等待一段时间才能生效!


Fra*_*len 6

这里有一个firebaser

我刚才尝试过同样的事情,发现目前还不行.

可以允许/拒绝读基于该文档的属性的特定文件.

可能的,以允许过滤基于该文件中的属性文件的查询,但目前这是唯一可行的基础上request.auth.

这意味着很遗憾,您的过滤器目前无法使用安全规则实施.我建议你提交一个功能请求.

更新(2018-04-24):这可能现在可以request.time,但我还没有机会测试.看看这里.