Firebase 数据库规则和 permission_denied 错误
Firebase database rules and permission_denied error
我有一个具有以下规则的 Firebase 数据库:
{
"rules": {
"messages": {
"$message": {
".read": "true",
".write": "newData.child('uid').val() === auth.uid"
}
}
}
}
数据结构如下所示:
我可以毫无问题地写入它,但是当我尝试读取时,出现以下错误:
Error: permission_denied at /messages: Client doesn't have permission to access the desired data.
我已经阅读了 firebase 文档,我的结构看起来与给出的示例相同。拜托,有人能告诉我这有什么问题吗?
请注意:将读取规则上移到 "messages" 下确实可以解决问题,但这不是我想要的解决方案,因为我想根据消息数据(类似于写入规则)编写一次规则我有基本规则。我想以这样的规则结束:
{
"rules": {
"messages": {
"$message": {
".read": "data.child('uid').val() === auth.uid",
".write": "newData.child('uid').val() === auth.uid"
}
}
}
}
您在 /messages/$message
定义的规则不会影响对 /messages
的查询,并且由于您没有向 /messages
添加任何读取权限,您将获得被拒绝的权限。
如果您想检索单个用户发出的消息,请考虑重组您的数据以将用户的消息嵌套在他们的 uid 下,例如
{
"rules": {
"user-messages": {
"$uid": {
".read": "auth.uid === $uid",
"$mid": {
".write": "newData.child('uid').val() === $uid"
}
}
}
}
}
使用此结构,您可以检索用户拥有的所有消息。如果您想检索所有消息,那么您还需要将消息写入 /messages
。您可以在此处存储消息数据,在 /user-messages/$uid
中,您可以存储用户发布的每条消息的密钥。您可以使用多位置更新同时执行两个写入。
{
"messages": {
"a": { "uid": "0", ... },
"b": { "uid": "0", ... }
}
"user-messages": {
"0": {
"a": true,
"b": true
}
},
"users": {
"0": { ... }
}
}
在 user-messages/$uid
获取用户消息的密钥,然后获取每条消息。
我有一个具有以下规则的 Firebase 数据库:
{
"rules": {
"messages": {
"$message": {
".read": "true",
".write": "newData.child('uid').val() === auth.uid"
}
}
}
}
数据结构如下所示:
我可以毫无问题地写入它,但是当我尝试读取时,出现以下错误:
Error: permission_denied at /messages: Client doesn't have permission to access the desired data.
我已经阅读了 firebase 文档,我的结构看起来与给出的示例相同。拜托,有人能告诉我这有什么问题吗?
请注意:将读取规则上移到 "messages" 下确实可以解决问题,但这不是我想要的解决方案,因为我想根据消息数据(类似于写入规则)编写一次规则我有基本规则。我想以这样的规则结束:
{
"rules": {
"messages": {
"$message": {
".read": "data.child('uid').val() === auth.uid",
".write": "newData.child('uid').val() === auth.uid"
}
}
}
}
您在 /messages/$message
定义的规则不会影响对 /messages
的查询,并且由于您没有向 /messages
添加任何读取权限,您将获得被拒绝的权限。
如果您想检索单个用户发出的消息,请考虑重组您的数据以将用户的消息嵌套在他们的 uid 下,例如
{
"rules": {
"user-messages": {
"$uid": {
".read": "auth.uid === $uid",
"$mid": {
".write": "newData.child('uid').val() === $uid"
}
}
}
}
}
使用此结构,您可以检索用户拥有的所有消息。如果您想检索所有消息,那么您还需要将消息写入 /messages
。您可以在此处存储消息数据,在 /user-messages/$uid
中,您可以存储用户发布的每条消息的密钥。您可以使用多位置更新同时执行两个写入。
{
"messages": {
"a": { "uid": "0", ... },
"b": { "uid": "0", ... }
}
"user-messages": {
"0": {
"a": true,
"b": true
}
},
"users": {
"0": { ... }
}
}
在 user-messages/$uid
获取用户消息的密钥,然后获取每条消息。