我正在尝试 Firebase
并且对 security rules 感到好奇.
假设您有一个 Firebase 数据集,简单表示为:
{
"myNewData" : "Some String"
}
如何编写规则,以便只有写入的对象才具有键名称 myNewData
?
我使用 POST
方法,Firebase 中的数据结构如下:
-myFireBaseapp
-someData
-RandomFirebaseKey
-myNewData
-RandomFirebaseKey
-myNewData
在我想出的模拟器中
{
"rules": {
".read":true,
"$someData":{
".write":true,
".validate": "newData.hasChild('myNewData')"
}
}
}
它在模拟器中有效,但在 postman 中无效。
发布
http://myfirebase.app.bucket/someData.json
{
"myNewData" : "Some String"
}
感谢您提供任何信息。
最佳答案
如果您希望您的数据始终有一个 key /someData/<anyKey>/myNewData
任何值,您都可以使用
{
"rules": {
".read":true,
"someData":{
"$anyKey": {
".write":true,
".validate": "newData.hasChild('myNewData')"
}
}
}
}
如果你眯着眼睛,你仍然可以看到这些规则中的路径/someData/$anyKey/myNewData
.
如果您还想验证 myNewData
的值是一个字符串,您可以将规则扩展为:
{
"rules": {
".read":true,
"someData":{
"$anyKey": {
".write":true,
".validate": "newData.hasChild('myNewData')",
"myNewData": {
".validate": "data.isString()"
},
"$other": {
".validate": false
}
}
}
}
}
我还添加了"$other: { ".validate": false }
到最后一个示例,这确保使用任何非指定键的写入都会被拒绝。所以现在/someData/$anyKey
只能包含 myNewData
属性是一个字符串。
这一切都在 Using $ Variables to Capture Path Segments 上的 Firebase 文档中进行了介绍。 ,我强烈建议学习。
关于javascript - firebase - 安全规则 REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38670043/