【发布时间】:2020-09-07 23:35:59
【问题描述】:
match /User/{uid} {
allow get : if request.auth.uid != null;
allow list: if request.auth.uid != null
&& ( request.time - resource.data.online ) < duration.value(24, 'h') &&
request.query.limit <= 40 && request.query.orderBy['online'] == 'DESC' ;
}
这是查询用户列表的规则,条件是只需要列出从现在开始少于24小时在线字段的用户文档。该集合的用户数据在线字段均少于 24 小时。但是当使用 get() 方法从 firebase-android-sdk 查询时它返回 false 。删除以下条件时它可以工作,但我很困惑它有什么问题。
( request.time - resource.data.online ) < duration.value(24, 'h')
我也尝试过使用duration.abs(request.time - resource.data.online ) < duration.value(24, 'h')
在Android客户端代码是
mQuery = mUsersDatabase.orderBy("online", Query.Direction.DESCENDING).limit(10);
mQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
....
【问题讨论】:
-
您能否编辑您的问题以同时显示执行查询的代码?
-
对我来说似乎是正确的,也许
resource.data.online是错误的类型?还要检查this Medium post,因为它还有一些其他示例,它们在比较之前将时间转换为毫秒(尽管这不是必需的)。 -
@FrankvanPuffelen 我已经添加了执行查询的android客户端
-
@Ajordat 在 Medium 帖子本身中,有 Responses 表明它无法正常工作
标签: android firebase google-cloud-firestore firebase-security