- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在编写和测试我的 Firestore 规则时遇到了一个奇怪的问题。这是我想要实现的目标:
在客户端 (javascript) 上,我使用以下行在我的文档中发送时间戳:
firebase.firestore.FieldValue.serverTimestamp()
这是当前的规则集。可以看到只有当新highscore的createdAt晚于session的createdAt时,才能创建score。
service cloud.firestore {
match /databases/{database}/documents {
function isValidNewScoreEntry() {
return request.resource.data.keys().hasOnly(['createdAt', 'name', 'score']) &&
request.resource.data.createdAt is timestamp &&
request.resource.data.name is string &&
request.resource.data.score is int &&
request.resource.data.name.size() <= 20
}
match /highscores/{entry} {
allow list: if request.query.limit <= 10;
allow get: if true;
allow create: if isValidNewScoreEntry() &&
request.resource.data.createdAt > get(/databases/$(database)/documents/sessions/$(request.auth.uid)).data.createdAt;
}
function isValidNewSession() {
return request.resource.data.keys().hasOnly(['createdAt']) &&
request.resource.data.createdAt is timestamp
}
match /sessions/{entry} {
allow list: if false;
allow get: if false;
allow create: if isValidNewSession();
allow update: if isValidNewSession();
}
}
}
当我模拟/测试这些规则时,我收到一条错误消息,提示我无法将“时间戳”与“ map ”进行比较。我不知道为什么 'createdAt' 值是一个映射,但似乎 get() 方法返回的内容与预期的不同。
我的问题是:将新提交的条目的属性 createdAt 与现有 session 文档的属性 createdAt 进行比较的正确方法是什么,就像我'我正在努力按照上述规则去做。
This is what a'Score' entry look like This is what a 'Session' entry looks like
编辑:
我做了更多的挖掘,发现这条线有效:
if request.resource.data.createdAt.toMillis() > get(/databases/$(database)/documents/sessions/$(request.auth.uid)).data.createdAt.seconds * 1000 ;
这很清楚地表明,并非两个 createdAt 都是相同的格式。最后一个似乎是具有“秒”和“纳秒”属性的基本对象。我确定它源于 Timestamp 接口(interface),但自 none of the methods found here 以来它作为平面对象返回。存在并在尝试调用它们时出错。然而,属性“seconds”确实存在于第二个时间戳中,但在第一个时间戳中不可访问。
最佳答案
我发现了为什么时间戳不是我预期的,并被转换为“ map ”。仔细阅读文档后,我发现 get()
方法返回一个 resource
。 resource
有一个属性data
:一张 map 。所以 get()
方法并没有像我预期的那样返回一个文档,而是一个平面 JSON 对象,它为我提供了在数据库中找到的所有属性。
https://firebase.google.com/docs/reference/rules/rules.firestore
https://firebase.google.com/docs/reference/rules/rules.firestore.Resource
关于google-cloud-firestore - 比较 Firestore 规则中的文档时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55185168/
给定一个带有多个 date_time 戳的字符串,我想 提取第一个戳及其前面的文本 候选字符串可以有一个或多个时间戳 后续的 date_time 戳记将被 sep="-" 隔开 后续date_time
是否可以合并从相机拍摄的文本和照片?我想在照片上标记日期和时间,但我在 Google 上找不到任何内容。 最佳答案 使用下面的代码来实现你所需要的。 Bitmap src = Bitm
有没有办法通过 Graph API 戳另一个用户?基于this post ,并使用 Graph Explorer ,我发布到“/USERID/pokes”,我已经授予它(Graph API 应用程序和
我有两个向左浮动的元素。一个是 body 的第一个 child ,另一个是容器的第一个 child ,容器是 body 的第二个 child 。 ...
我是一名优秀的程序员,十分优秀!