有问题再次解决了火座安全问题。
假设我在firebase中有以下json数据结构
{
"users" : {
"userguid001" : {
"name" : "Test User 1",
"email" : "test1@test.com",
"emailverified" : "true",
"otherinfo1": "some text",
"otherinfo2": "some more text",
"otherinfo3": "and some more text"
},
"userguid002" : {
"name" : "Test User 2",
"email" : "test2@test.com",
"emailverified" : "true",
"otherinfo1": "some text",
"otherinfo2": "some more text",
"otherinfo3": "and some more text"
},
"userguid003" : {
"name" : "Test User 3",
"email" : "test3@test.com",
"emailverified" : "true",
"otherinfo1": "some text",
"otherinfo2": "some more text",
"otherinfo3": "and some more text"
}
}
}
是否有任何方法可以允许用户(知道userguid)对特定用户分支的一般读/写访问权限,同时禁止对该分支内的特定密钥进行写访问 - 即“emailverified”和“email” ?
我需要这样做,因为我们会进行一些服务器端处理来验证电子邮件地址,我们不希望人们能够输入经过验证的电子邮件地址,而无需通过我们的验证系统。
我认为安全规则与以下内容类似,但这显然不适用于读/写逻辑在firebase中向下流动的方式:
{
"rules": {
".read": false,
".write": false,
"users": {
"$userid": {
".read": true,
".write": "true",
"emailverified" : {
".read": true,
".write": "false"
},
"email" : {
".read": true,
".write": "false"
}
}
}
}
}
在这个阶段我能想到的唯一方法是将它分成两个根分支(一个用户可以读/写,一个只能读取)。我已经看过几次提到这种方法,但只是想知道我是否可以做任何事情来保持一个分支。
道歉,如果这是一个重复的问题,但我很难理解许多问题中提出的一些例子,因为它们似乎不符合我的要求。
感谢。
答案 0 :(得分:3)
由于security rules cascade和cannot be used as filters,答案必须是否定的。请查看the guide并在此处保存一些骚扰。
解决方案是将私有和公共数据拆分为自己的路径。
/user_profiles/$user_id/email_verified
/private_user_data/$user_id/email