Firebase DB规则设置为所有者只读
我下载了一个简单的演示项目,我正在尝试做一些简单的更改。但我不知道如何设置DB规则,这样只有创建项目的人才能打开与项目的链接。现在可以打开项目链接所有登录的人 数据库规则文件:Firebase DB规则设置为所有者只读,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我下载了一个简单的演示项目,我正在尝试做一些简单的更改。但我不知道如何设置DB规则,这样只有创建项目的人才能打开与项目的链接。现在可以打开项目链接所有登录的人 数据库规则文件: { "rules": { ".read": "auth !== null", ".write":"auth !== null", "users": { "$uid": { ".write": "auth !== null && $uid === au
{
"rules": {
".read": "auth !== null",
".write":"auth !== null",
"users": {
"$uid": {
".write": "auth !== null && $uid === auth.uid",
".read": "$uid === auth.uid"
}
},
"projects": {
".indexOn": ["createdBy"]
}
}
}
我想知道如何在
“项目”中添加行:
类似于”.read:“createdBy===auth.uid”
,但它不起作用。我将非常感谢您的帮助。一旦您授予用户对某个节点的读写权限,他们对该节点下的所有数据都有该权限。您不能在较低级别取消该权限。在文档中,这在下面提到
在规则的顶层,您授予用户以下权限:
".read": "auth !== null",
".write":"auth !== null",
根据上述解释,这意味着任何登录用户都具有对完整数据库的读/写访问权限。您在较低级别拥有的任何读/写规则都会被忽略
因此,您的第一步将是删除这些顶级访问规则
接下来,您希望只允许用户在创建项目时才能读取该项目。在以下规则中:
"projects": {
".indexOn": ["createdBy"],
"$projectid": {
".read": "auth.uid == data.child('createdBy').val()"
}
}
有了它,如果用户创建了myproject
,则可以读取/projects/myproject
请注意,根据上述规则,任何用户都不能从
/projects
读取,因为您没有授予任何人该节点的读取权限。Firebase security不会代表您过滤任何数据,他们只是检查是否允许操作。有关这方面的更多信息,请参阅上的文档
如果希望用户能够运行一个查询,以获取他们创建的所有项目,则需要两件事:
ref.orderByChild("createdBy").equalTo(uid)
/projects
的规则,只允许该查询
"projects": {
".read": "auth.uid != null &&
query.orderByChild == 'createdBy' &&
query.equalTo == auth.uid"
}
/projects
。因此,安全规则和代码协同工作,以确保用户只获得授权读取的数据
有关最后一个主题的更多信息,请参阅。上的文档,但我还有一个问题。当我试图使用
“.read”:“auth.uid==data.val().createdBy”
我得到了错误错误保存规则-第11行:没有这样的方法/属性“createdBy”。
即使我在你的评论中修复了打字错误(createBy)数据.child('createdBy').val()