Firebase数据库规则-动态密钥的通配符
我有一个用例,在这个用例中,我希望仅当ID中有一个键===时,才允许其他用户读取我ID键下的数据 假设我有用户123和456,他们将json对象写在“Firebase数据库规则-动态密钥的通配符,firebase,firebase-realtime-database,firebase-authentication,firebase-security,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,我有一个用例,在这个用例中,我希望仅当ID中有一个键===时,才允许其他用户读取我ID键下的数据 假设我有用户123和456,他们将json对象写在“ orders- I -123 I -456 我只希望用户123和456能够读取456个节点。根据我提供的规则,只有123能够读取节点: "orders": { "$uid": {
orders-
I
-123
I
-456
我只希望用户123和456能够读取456个节点。根据我提供的规则,只有123能够读取节点:
"orders": {
"$uid": {
".read": "auth.uid === $uid || root.child('orders').child($uid).child(auth.uid).exists()",
".write": "auth.uid != null",
}
}
我做错了什么?有人能帮我吗
编辑:模拟器的两个屏幕截图
我通过设置这些规则解决了这个问题(注意$id嵌套在$uid中): 之前我认为这一行应该完成以下工作:
".read": "auth.uid === $uid || root.child('orders').child($uid).child(auth.uid).exists()",
请记住,我们无法知道您屏幕截图中的数据是什么意思。而且….使中间的段落不必要地难以阅读。您可能希望用实际的JSON替换屏幕截图,您可以通过单击溢出菜单中的“导出JSON”链接来获得(⠇) 在您的上。查看您希望允许的最小读取代码也是非常有用的,但这是失败的;具有尽可能多的硬编码值。感谢您的评论,您对…的看法是正确的,并且替换了它,现在我认为更具可读性。我正在规则模拟器中尝试,因为直到我让规则按我想要的方式运行。案例是用户在“订单”下下下订单myID并等待答案,我将在同一个节点中发布。我希望myID只能由我读取,如果有具有此用户ID的子级,则此用户可以读取此子级,但只能读取此子级…问题是我不知道如何设置此规则我认为我提供的代码应该可以工作,但它不允许用户读取此节点。如果问题只存在于模拟器中,请编辑您的问题,以包括模拟器的屏幕截图,以及您尝试读取的路径和正在使用的身份验证状态。好的,我添加了两个屏幕截图。当您使用模拟器时,它使用数据库中的实际数据来确定是否允许读取或写入。您输入的路径为模拟器的ut看起来与数据库中的不匹配。
".read": "auth.uid === $uid || root.child('orders').child($uid).child(auth.uid).exists()",