【发布时间】:2020-05-31 19:52:59
【问题描述】:
我有这个用例,我想授予其他用户读取我的 ID 密钥下数据的权限,前提是他们的 ID 有一个密钥 ===。
假设我有用户 123 和 456,他们在“
下编写 json 对象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",
}
}
我在这里做错了什么?有人可以帮我解决这个问题吗?
编辑:模拟器的两张截图
【问题讨论】:
-
请记住,我们无法知道您的屏幕截图中的数据是什么意思。并且......正在使中间段落不必要地难以阅读。您可能想用实际的 JSON 替换屏幕截图,您可以通过单击 Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取。查看您想要允许的最小读取代码也非常有用,但这会失败;尽可能多地硬编码值。
-
感谢您的评论,您对 .... 的看法是正确的,并替换了它,现在我认为它更具可读性。我在规则模拟器中尝试这个,因为我没有实现它,直到我让规则按照我想要的方式工作。案例是用户在“orders”myID 下下订单并等待我将在同一个节点中发布的答案。我希望 myID 只能由我读取,然后如果有一个具有此用户 ID 的孩子,该用户能够读取这个孩子,但只有这个...问题是我不知道如何设置此规则我认为我提供的代码应该可以工作,但它不允许用户阅读此节点。
-
如果问题仅存在于模拟器中,请编辑您的问题以包含模拟器的屏幕截图,其中包含您尝试读取的路径以及您正在使用的身份验证状态。
-
好的,我已经添加了两张截图。
-
当您使用模拟器时,它会使用您数据库中的实际数据来确定是否允许读取或写入。您输入到模拟器的路径看起来与您数据库中的路径不匹配。
标签: firebase firebase-realtime-database firebase-authentication firebase-security