gpt4 book ai didi

swift - Firebase indexOn 安全和规则不起作用

转载 作者:可可西里 更新时间:2023-11-01 00:36:54 26 4
gpt4 key购买 nike

我在 xcode 中遇到这个错误:

使用未指定的索引。考虑将/groups 处的 ".indexOn": "members/rsenov"添加到您的安全规则中以获得更好的性能

这是我的 JSON 数据结构:

{
"groups" : {
"-KB422VV21cPzpgi1wF1" : {
"author" : "rsenov",
"members" : {
"rsenov" : true
},
"name" : "Item 1"
},
"-KB423lni1Iptn2fGwi1" : {
"author" : "rsenov",
"members" : {
"rsenov" : true
},
"name" : "Item 2"
},
"-KB48kVOz4yTfdE86Ub7" : {
"author" : "senovi",
"members" : {
"senovi" : true
},
"name" : "Asd"
}
},
"users" : {
"rsenov" : {
"email" : "rsenov",
"groups" : {
"-KB422VV21cPzpgi1wF1" : true,
"-KB423lni1Iptn2fGwi1" : true
},
"name" : "Ruben",
},
"senovi" : {
"email" : "senovi",
"groups" : {
"-KB48kVOz4yTfdE86Ub7" : true
},
"name" : "Rubén ",
}
}
}

这是我到目前为止在我的安全规则中所做的:

{
"rules": {
".read": true,
".write": true,
"groups": {
"$group_id": {
".indexOn": "members"
}
}
}
}

这是触发错误的代码:

DataService.dataService.GROUPS_REF.queryOrderedByChild("members/\(DataService.dataService.CURRENT_USER_ID)").queryEqualToValue(true).observeEventType(.Value, withBlock: { snapshot in
//some code
})

最佳答案

您正尝试在数组上添加索引,这在 Firebase 中是不可能的。

正如错误消息告诉您的(出奇地准确),您需要为 members/rsenov 添加索引:

{
"rules": {
".read": true,
".write": true,
"groups": {
"$group_id": {
".indexOn": "members/rsenov"
}
}
}
}

但这意味着您需要为每个用户添加一个索引,这是非常低效的。这就是推荐去规范化的原因。

作为替代方案(我在 answer to your last question 中推荐),您可以自己创建自定义索引,这个过程称为反规范化。

{
"groups" : {
"-KB422VV21cPzpgi1wF1" : {
"author" : "rsenov",
"members" : {
"rsenov" : true
},
"name" : "Item 1"
},
"-KB423lni1Iptn2fGwi1" : {
"author" : "rsenov",
"members" : {
"rsenov" : true
},
"name" : "Item 2"
}
},
"users": {
"rsenov": {
"groups": {
"-KB422VV21cPzpgi1wF1": true,
"-KB423lni1Iptn2fGwi1": true
}
}
}
}

使用此数据结构,您甚至无需查询即可查找用户的组:

ref.childByAppendingPath("users/rsenov/groups")
.observeEventType(.Value, withBlock: { snapshot in

或者,如果您想使用当前经过身份验证的用户:

ref.childByAppendingPath("users")
.childByAppendingPath(ref.authData.uid)
.childByAppendingPath("groups")
.observeEventType(.Value, withBlock: { snapshot in

关于swift - Firebase indexOn 安全和规则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35540080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com