我有一个简单的演示项目,我已经下载了,我正在尝试做一些简单的更改。但是我无法弄清楚如何设置数据库规则,因此只有有人创建了项目才能打开与项目的链接。现在可以打开每个登录用户的项目链接。
数据库规则文件:
__call__
我想知道如何像tf.keras.Model
一样向(None, None, None, None)
添加行,但是行不通。感谢您的帮助。
答案 0 :(得分:0)
在授予用户对节点的读写权限后,他们将对该节点下的所有数据具有该权限。您不能在较低级别取消许可。在文档中的rules cascade下对此进行了提及。
在规则的顶层,您向用户授予此权限:
".read": "auth !== null",
".write":"auth !== null",
鉴于以上说明,这意味着所有已登录的用户都具有对整个数据库的读/写访问权限。您在较低级别拥有的任何读/写规则都将被忽略。
因此,您的第一步将是删除这些顶级访问规则。
接下来,您要允许用户仅在创建项目后才能阅读该项目。在规则中:
"projects": {
".indexOn": ["createdBy"],
"$projectid": {
".read": "auth.uid == data.child('createdBy').val()"
}
}
使用此方法,用户可以创建/projects/myproject
来阅读myproject
。
请注意,根据上述规则,没有用户可以从/projects
进行读取,因为您没有授予任何人对该节点的读取权限。 Firebase安全性不会代表您过滤任何数据,它们只是检查是否允许操作。有关更多信息,请参见rules are not filters上的文档。
如果您希望用户能够运行查询以获取他们创建的所有项目,则需要做两件事:
仅请求那些项目的查询。
ref.orderByChild("createdBy").equalTo(uid)
/projects
上的一条规则,仅允许该查询。
"projects": {
".read": "auth.uid != null &&
query.orderByChild == 'createdBy' &&
query.equalTo == auth.uid"
}
因此,现在只对/projects
进行读取,而查询只请求用户创建自己的项目。因此,安全规则和代码可以共同确保用户仅获得他们有权读取的数据。
有关最后一个主题的更多信息,请参见query based rules上的文档。