ios - 你如何观察一个没有覆盖低级子规则的高级子级的快照?
问题描述
JSON
"users" : {
"02PdiNpmW3MMyJt3qPuRyTpHLaw2" : {
"Coordinates" : {
"latitude" : -24.809620667034363,
"longitude" : 28.321706241781342
},
"Education" : "6", ........./// here are 10 Childs further on same level as education
"Music"
目前的规则
{
"rules": {
".read": false,
".write": false,
, "users": {
"$uid": {
"Education" :{
".read": "$uid == auth.uid",
".write": "$uid == auth.uid"
}
根据我的理解,如果我让用户为授权用户阅读规则,它将覆盖教育规则。下面是需要用户阅读规则的地方
let artist = Database.database().reference().child("users").queryOrdered(byChild: "music").queryStarting(atValue:dateToday.timeIntervalSince1970*1000)
artist.observe(DataEventType.value, with: { snapshot in
更新:我在规则中有一个错字“用户”
解决方案
一般来说,确实规则是,如果您授予某人对节点的读(或写)访问权限,他们对该节点下的所有数据具有相同的访问权限。因此,您不能只说".read": true
他们/people
会读取整个节点。
您可以做的是指定您的安全规则中允许的查询。因此,要允许每个人读取具有给定music
值的所有节点,您可以执行以下操作:
"baskets": {
".read": "query.orderByChild == 'music' &&
query.equalTo > 1354867200000"
}
这里要记住几件事:
- 我在这里对其进行了硬编码,但是您必须以某种方式根据
now
变量计算规则中过滤器的值。 - 您只能过滤单个值,因此不能同时过滤
music
和uid
。您可以将这两个值合并到一个属性中并对其进行排序/过滤。有关更多信息,请参阅:基于 Firebase 中的多个 where 子句的查询
推荐阅读
- java - SimpleJdbcCall 调用函数
- api - Google docs 拼写检查 API - 可用吗?
- kubernetes - 容器启动探测未执行
- python - 在 Python 中打印不带大写字母的函数
- python - 解释此归并排序代码中 L 和 R 的范围?
- amazon-web-services - 无法让 AWS Athena escapeChar 工作
- flutter - Navigator 没有可替换的活动路线
- dotenv - 如何在 .env 文件中定义数组/对象?
- javascript - 反应:useEffect “悖论”与 eventHandler 道具
- angular - 如何使用组件而不是 html 作为 Angular CLI 中另一个组件的插槽的内容?