遇到 Firebase 规则问题
Having trouble with firebase rules
我是 firebase 的新手,我想做一些规则,但我不知道如何做好。如果有人可以帮助我并向我解释他们是如何工作的。那样就好了!那么让我们开始吧!
这是我的实时数据库:Image of Database
而我想做的是只有在应用中注册的用户才能阅读消息和用户信息。另外,如果您不是发送消息的用户,则不能 delete/edit 消息。如果您不是用户,则用户信息也是如此,您不能修改任何内容,只能阅读。对不起我的英语。
我该怎么做?使用 Firebase 规则。
我的实际规则是:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
我已经尝试使用 Internet 示例和 Whosebug 示例,但无法完成。所以我就这样留下了。
所以,
第一:在规则中,您有三个标准参数:“读取”、“写入”和“验证”。您可以构建适合您的数据库架构的规则。让我们开始吧:
{
"rules":{
"Messages":{
// we will ad rules here leter
},
"Users":{
// we will ad rules here leter
},
".write":false,
".read":false
}
}
现在我们可以为“消息”节点设置不同的规则,为“用户”节点设置不同的规则。最后一个参数是针对 root 的,我们不希望用户设置新节点或读取它们,我们只想允许它们 read/write 在上面的两个节点中。
当用户试图从消息节点读取时,规则将检查“Root/Message”并在那里寻找规则,“用户”块中的规则不会影响此操作。
规则工作级联,这意味着如果用户找到允许他写的规则,写操作将被数据库接受,即使较低的规则也会被禁止。
在 firebase 规则中,您可以使用大量函数。首先让我们保护“用户”节点。
为了只允许认证用户写入,我们将添加如下内容:
"Users":{
$uid:{
".write": auith.uid == $uid,
".read": auth != null,
},
".write": auth != null
}
使用$符号我们可以创建变量,当用户在Root/Users/1234中尝试write/read时,$uid将取值1234。使用“auith.uid == $uid”我们只允许用户在自己的节点中写入
.我们还应该将写入规则设置得较低(在“用户”节点中)以允许用户向该节点添加新的子节点。
对于“消息”规则,我们将使用 hasChild() 方法,如下所示:
"Message":{
$messageUID:{
".write": data.child('uId').val() == auth.uid,
".validate": newData.hasChild('message') && newData.hasChild('name')..
},
".write":root.child("Users").haschild(auth.uid),
".read":root.child("Users").haschild(auth.uid)
}
这里我们设置只有uid在uId属性中的用户才能写入$messageUID节点。 “.validate”规则正在检查操作后的数据是否具有消息子项和名称子项(您可以添加更多子项)。
Rule ".write":root.child("Users").haschild(auth.uid) 将只允许为其 ID 存在于 Users 节点中的用户写入。
我们总共有:
{
"rules":{
"Messages":{
"$messageUID":{
".write": "data.child('uId').val() == auth.uid",
".validate": "newData.hasChild('message') &&
newData.hasChild('name')"
},
".write": "root.child('Users').hasChild(auth.uid)",
".read":"root.child('Users').hasChild(auth.uid)",
},
"Users":{
"$uid":{
".write": "auth.uid == $uid",
".read": "auth != null",
},
".write": "auth != null"
},
".write":false,
".read":false
}
}
我没有测试过这个规则,所以也许你需要改变一些东西,但现在你应该更好地理解如何使用规则以及你可以用它们做什么。问一下会不会有问题
我是 firebase 的新手,我想做一些规则,但我不知道如何做好。如果有人可以帮助我并向我解释他们是如何工作的。那样就好了!那么让我们开始吧!
这是我的实时数据库:Image of Database
而我想做的是只有在应用中注册的用户才能阅读消息和用户信息。另外,如果您不是发送消息的用户,则不能 delete/edit 消息。如果您不是用户,则用户信息也是如此,您不能修改任何内容,只能阅读。对不起我的英语。
我该怎么做?使用 Firebase 规则。
我的实际规则是:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
我已经尝试使用 Internet 示例和 Whosebug 示例,但无法完成。所以我就这样留下了。
所以, 第一:在规则中,您有三个标准参数:“读取”、“写入”和“验证”。您可以构建适合您的数据库架构的规则。让我们开始吧:
{
"rules":{
"Messages":{
// we will ad rules here leter
},
"Users":{
// we will ad rules here leter
},
".write":false,
".read":false
}
}
现在我们可以为“消息”节点设置不同的规则,为“用户”节点设置不同的规则。最后一个参数是针对 root 的,我们不希望用户设置新节点或读取它们,我们只想允许它们 read/write 在上面的两个节点中。 当用户试图从消息节点读取时,规则将检查“Root/Message”并在那里寻找规则,“用户”块中的规则不会影响此操作。 规则工作级联,这意味着如果用户找到允许他写的规则,写操作将被数据库接受,即使较低的规则也会被禁止。
在 firebase 规则中,您可以使用大量函数。首先让我们保护“用户”节点。 为了只允许认证用户写入,我们将添加如下内容:
"Users":{
$uid:{
".write": auith.uid == $uid,
".read": auth != null,
},
".write": auth != null
}
使用$符号我们可以创建变量,当用户在Root/Users/1234中尝试write/read时,$uid将取值1234。使用“auith.uid == $uid”我们只允许用户在自己的节点中写入 .我们还应该将写入规则设置得较低(在“用户”节点中)以允许用户向该节点添加新的子节点。
对于“消息”规则,我们将使用 hasChild() 方法,如下所示:
"Message":{
$messageUID:{
".write": data.child('uId').val() == auth.uid,
".validate": newData.hasChild('message') && newData.hasChild('name')..
},
".write":root.child("Users").haschild(auth.uid),
".read":root.child("Users").haschild(auth.uid)
}
这里我们设置只有uid在uId属性中的用户才能写入$messageUID节点。 “.validate”规则正在检查操作后的数据是否具有消息子项和名称子项(您可以添加更多子项)。
Rule ".write":root.child("Users").haschild(auth.uid) 将只允许为其 ID 存在于 Users 节点中的用户写入。
我们总共有:
{
"rules":{
"Messages":{
"$messageUID":{
".write": "data.child('uId').val() == auth.uid",
".validate": "newData.hasChild('message') &&
newData.hasChild('name')"
},
".write": "root.child('Users').hasChild(auth.uid)",
".read":"root.child('Users').hasChild(auth.uid)",
},
"Users":{
"$uid":{
".write": "auth.uid == $uid",
".read": "auth != null",
},
".write": "auth != null"
},
".write":false,
".read":false
}
}
我没有测试过这个规则,所以也许你需要改变一些东西,但现在你应该更好地理解如何使用规则以及你可以用它们做什么。问一下会不会有问题