【发布时间】:2020-08-16 20:55:32
【问题描述】:
,"people" : {
".read": "auth != null",
"$uid": {
},
"e2" : {
".read": "auth.uid != null",
".write": "$uid == auth.uid"
},
"l1" : {
".read": "auth.uid != null",
".write": "auth.uid != null"
}
所以 e2 是电子邮件的@。例如@gmail 或@aol 或@yahoo。对于 l1 孩子,我想制定写规则:写 if auth.uid != null && e2 与你正在写 l1 的人的 e2 具有相同的值。我能得到的最远的是这样的:
"data.parent().child(people).hasChildren(['auth.uid', 'l1'])"
JSON
"people": {
"02PdiNpmW3MMyJt3qPuRyTpHLaw2": {
"e2": "aol.com",
"l1": 4,
"X": {
"e2": "aol.com",
"l1": 0,
"P": {
"e2": "gmail.com",
"l1": 0,
基本上 l1 = like,所以一个用户以将计数加 1 的形式写入另一个用户的 l1。
应该成功的操作:
用户 X 想要喜欢 uid 为 02PdiNpmW3MMyJt3qPuRyTpHLaw2 的用户。用户 X 有一个 @aol.com 的 e2 子级。这与他想要喜欢的用户的e2孩子相同。用户 x 也是授权用户,因此他满足 2 个要求来写他想要喜欢的用户的 l1。
不应该成功的操作:
用户 P 想要喜欢 uid 为 02PdiNpmW3MMyJt3qPuRyTpHLaw2 的用户。用户 P 有一个 @gmail.com 的 e2 子级。这和他想要喜欢的用户的e2孩子不一样。用户P因此不满足写给他想点赞的用户的l1的要求
【问题讨论】:
-
我很难解析这里的需求,
e2和l1的名字肯定没有帮助。您可以编辑您的问题以包括:1)您尝试编写的数据库中的 JSON(作为文本,请不要截图)? 2)应该成功的写操作? 3) 一个应该失败的写操作。 -
@FrankvanPuffelen 感谢您的评论。 A 添加了您建议的内容。希望现在很清楚。
-
不是用文字来描述操作,你能把它们写成代码吗?除此之外,至少有一个问题是
auth.uid不应该在data.parent().child(people).hasChildren([auth.uid, 'l1'])"中使用引号 -
@FrankvanPuffelen 谢谢。我不知道如何在代码中编写它。这基本上就是我想要解决的问题。我得到的最接近的是 '"data.parent().child(people).hasChildren(['auth.uid', 'l1'])"',这并不接近。这样的规则可能吗?
-
我仍然很难理解用例,因此无法为其建模规则。如果我正确理解 JSON sn-p,则意味着:1) 用户
X喜欢用户02PdiNpmW3MMyJt3qPuRyTpHLaw2。 2) 这是允许的,因为它们的e2子节点的值是相同的。那是对的吗?如果是这样,l1与这一切有什么关系?
标签: firebase firebase-realtime-database firebase-authentication firebase-security