在firebase中定义规则时,是否可以引用层次结构中的更高级别,如下所示:
"enterprises": {
"$enterprise_id": {
"meetings": {
"$meeting_id": {
".read": "$meeting_id === auth.meeting_id && $enterprise_id == auth.enterprise_id",
"users": {
"$user_id": {
".read": "$user_id === auth.uid && $meeting_id === auth.meeting_id && $enterprise_id === auth.enterprise_id"
}
}
}
}
}
}
这意味着为了阅读" $ meeting_id"用户必须拥有一个令牌,其中包含匹配meeting_id和enterprise_id的声明。
实际上它似乎不起作用,但实现这一目标的方法是什么?
也许是这样的:
"data.parent().parent().val() === auth.enterprise_id"
?
答案 0 :(得分:0)
在firebase规则模拟器中进行了一些摸索后,我想到了一些事情:
1)引用令牌声明的方式是auth.claims.meeting_id
2)我声明中的ID是大整数,不起作用,我将它们转换为字符串。
"claims": {
"meeting_id": "5150900591001600",
"enterprise_id": "5719825666015232"
}
之后,引用更高级别ID的规则,如此
".read": "$meeting_id === auth.claims.meeting_id && $enterprise_id === auth.claims.enterprise_id"
工作正常。
如果您遇到类似问题,最重要的建议是使用规则模拟器,粘贴您的令牌内容,并尝试“一步一步”,如@andréKool所说。