我正在为使用Bolt编译器创建的Firebase数据结构设置验证规则。
我目前正在接受下面的Bolt声明:
path /sharedEvents/{share} is Boolean[] {
read() { isMailOfCurrentUser( share ) }
create() { isOwnerOfEvent( ...) } //NOT YET CORRECT!
delete() { isOwnerOfEvent( prior(...) } //NOT YET CORRECT!
}
有了这个,我正试图实现这个目标:
第二点是我遇到麻烦的地方 - 我无法创建创建/删除规则 - 因为我不知道如何在验证规则中引用布尔值的键... < / p>
Firebase中上述bolt语句的示例数据:
sharedEvents
ZW5kc3dhc0BldmVyeW1hMWwuYml6
-BDKBEvy-hssDhKqVF5w: true
-FDKBEvy-hsDsgsdsf5w: true
-ADBEvy-hfsdsdKqVF5w: true
aXQnc251bWJlcnNAbWExbDJ1LnVz
-KBEvy-hsDhH6OKqVF5w: true
澄清此示例的需求: 只有邮件“ZW5kc3dhc0BldmVyeW1hMWwuYml6”的用户才能读取三个嵌套的子级。 只有事件'-BDKBEvy-hssDhKqVF5w'的所有者才能创建/删除此值。 (与其他事件键/布尔对相同)。
我的问题:此设置是否正常工作(以及如何设置创建/删除规则)?或者这不起作用,我应该重新考虑/构建数据吗?
感谢任何帮助!
-----------------输出JSON文件--------------------------- ---------------
上面的问题已经回答,本节显示了生成的json
"sharedEvents": {
"$share": {
".read": "<removed for readability>",
"$event": {
".validate": "newData.isBoolean()",
".write": "<removed for readability>"
}
}
},
再次感谢您的快速支持!
答案 0 :(得分:1)
您需要一个嵌套的path
语句来处理对事件的限制(/sharedEvents/$mail/$eventid
下的节点)。我使用这个JSON结构快速制作原型:
{
"events": {
"-ADBEvy-hfsdsdKqVF5w": {
"name": "Event 1",
"ownerMail": "aXQnc251bWJlcnNAbWExbDJ1LnVz"
},
"-BDKBEvy-hssDhKqVF5w": {
"name": "Event 2",
"ownerMail": "aXQnc251bWJlcnNAbWExbDJ1LnVz"
},
"-FDKBEvy-hsDsgsdsf5w": {
"name": "Event 3",
"ownerMail": "aXQnc251bWJlcnNAbWExbDJ1LnVz"
},
"-KBEvy-hsDhH6OKqVF5w": {
"name": "Event 3",
"ownerMail": "ZW5kc3dhc0BldmVyeW1hMWwuYml6"
}
},
"sharedEvents": {
"ZW5kc3dhc0BldmVyeW1hMWwuYml6": {
"-ADBEvy-hfsdsdKqVF5w": true,
"-BDKBEvy-hssDhKqVF5w": true,
"-FDKBEvy-hsDsgsdsf5w": true
},
"aXQnc251bWJlcnNAbWExbDJ1LnVz": {
"-KBEvy-hsDhH6OKqVF5w": true
}
},
"userMails": {
"peter": "aXQnc251bWJlcnNAbWExbDJ1LnVz",
"puf": "ZW5kc3dhc0BldmVyeW1hMWwuYml6"
}
}
并提出了这些规则:
path /sharedEvents/{share} {
read() { isMailOfCurrentUser(share) }
}
path /sharedEvents/{share}/{event} is Boolean {
create() { isOwnerOfEvent(event) }
delete() { isOwnerOfEvent(prior(event)) }
}
isMailOfCurrentUser(share) { true }
getMailOfCurrentUser(uid) { root.ownerMails.uid }
getEventOwnerMail(event) { root.events.event.ownerMail }
isOwnerOfEvent(event) { getMailOfCurrentUser(auth.uid) == getEventOwnerMail(event) }
忽略我的任何错误,这应该是您正在寻找的授权结构的基础。