我想创建一个FireStore规则,该规则在当前日期超过文档中的时间戳值后,将读取的特权文件读取到文档。
这适用于博客网络应用程序。 E.G博客设定了一篇博文,可在特定日期向公众开放。
通过阅读文档,这应该可行,但它不会。
service cloud.firestore {
match /databases/{database}/documents {
match /Articles/{article}{
allow read: if request.time.date() < resource.data.date
}
}
}
我错过了什么?
答案 0 :(得分:6)
firebaser here
我前一段时间尝试过同样的事情,发现目前还没有。
可以根据该文档的属性允许/拒绝对特定文档的读取。
可以允许查询根据该文档中的属性过滤文档,但目前只能基于request.auth
进行过滤。
这意味着很遗憾,您的过滤器目前无法使用安全规则实施。我建议你file a feature request加入。
更新(2018-04-24):{em}可能现在可以使用request.time
,但我还没有机会参加考试然而。看看here。
答案 1 :(得分:2)
尝试切换&lt;到&gt;。
request.time将是访问文档的时间,而resource.data.date应该是文档的创建时间戳。
尝试将此用于您的安全规则:
allow read: if request.time > (resource.data.timestampPropertyName + duration.time(1, 0, 0, 0));
duration.time(4,3,2,1)将创建一个4小时,3分钟,2秒,1纳秒的持续时间。
更多信息可在以下网址找到: https://firebase.google.com/docs/firestore/reference/security/#timestamp
请务必在保存安全规则后等待一段时间才能生效!
答案 2 :(得分:1)
注意::由于这是我对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
}
}
}
这是基于我在2018.09.29的个人测试
答案 3 :(得分:0)
答案 4 :(得分:0)
我想为游戏做类似的事情。我只想在特定日期之后激活和停用游戏对象。我用谷歌的云功能做到这一点。我部署了每天运行的功能,以检查Firestore文档并根据脚本更改值。
答案 5 :(得分:0)
将此规则添加到 fire-store db 的规则部分。
[https://firebase.google.com/docs/firestore/security/get-started][1]
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}