在我的Firestore规则中,我具有以下功能:
//True if the current user is 1 of the admins of this event, false otherwise
function isAnAdminOfEvent(){
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.mail in resource.data.admins;
//return "eUB5Lnl5" in resource.data.admins;
}
以某种方式,此规则始终失败。当我注释第一行并注释掉最后一行时,规则工作正常。请注意,我确定当前用户对象的邮件属性确实设置为“ eUB5Lnl5”。
users对象具有以下获取权限:
match /users/{userId} {
allow read: if request.auth.uid == userId; //users can only read their own data
}
备注:这是我的规则定义的第一部分,在其中使用“ get”方法。我可能在这里做错了...
在请求中添加了评论:
当前失败的测试代码如下:
//Check that event admins are allowed to update other data of the event, such as the description or color
CompletableFuture<Boolean> futureEventAdminChangeAction = new CompletableFuture<>();
mFieldsMap.clear();
mFieldsMap.put(DESCRIPTION, "An updated description!");
mFieldsMap.put(COLOR, 3);
mFieldsMap.put(NAME, "The new name");
FireUtilEvents.getEvent( key ).set( mFieldsMap, SetOptions.merge()).addOnCompleteListener(task -> futureEventAdminChangeAction.complete( task.isSuccessful() ));
Assert.assertEquals( true, futureEventAdminChangeAction.get() );
在测试中,我正在验证事件管理员是否可以更新他是管理员的事件。事件数据的更新规则如下:
allow update: if isNoEventOwnerChange() &&
(isOwner() || (isAnAdminOfEvent() && isNotForbiddenAdminChange()));
在测试中:
答案 0 :(得分:1)
在isAnAdminOfEvent
块中放置函数match /databases/{database}/documents
的定义。