gpt4 book ai didi

ios - 无法理解 Firebase 数据库规则

转载 作者:行者123 更新时间:2023-11-29 00:54:30 25 4
gpt4 key购买 nike

这一定是一件容易做的事,而我正在做一些愚蠢的事情,但是 4 个小时我无法理解我做错了什么。我有这样的数据库实体:

posts:
-KK-3ajDuSUglnMMdXgy
authorId: "DYI4TPbwQocFsVROStUqcGNFHhW2"
authorName: "john"
privacy: "PrivacyTypeWorld"
text: "some post text"

帖子可以有 3 级隐私:所有人 (PrivacyTypeWorld)、仅作者 (PrivacyTypePrivate) 和好友 (friendId、friendId...)。

我的安全规则如下所示:

{
"rules": {
"posts": {
".read": "auth != null && (data.child('privacy').val() === 'PrivacyTypeWorld')",
".write": "auth != null"
}
}
}

但是按照这个规则我什么也看不到。如果我设置 ".read": "auth != null" - 一切正常。我做错了什么?

编辑:

要检索我使用的数据:

_refHandle = [[_ref child:@"posts"] observeEventType:FIRDataEventTypeChildAdded
withBlock:^(FIRDataSnapshot *snapshot) {
[_arrPosts addObject:snapshot];
[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:_arrPosts.count-1 inSection:0]] withRowAnimation: UITableViewRowAnimationAutomatic];
}];

最佳答案

你有两个错误:

  1. 您的规则定义了错误级别的访问权限(如 @adolfosrs 所说)。最容易理解的是,没有节点 posts/privacy,因此检查将始终返回 false。相反,您应该授予对 posts/$postid 的访问权限,以便您检查 posts/$postid/privacy

  2. 您正在尝试阅读帖子。 Firebase 查询始终检查您读取/查询的级别的权限。由于您没有授予对帖子的读取权限,因此查询将失败。

最后一位通常称为 "rules are not filters" or "rules cannot be used to filter data" .最好的答案是 Restricting child/field access with security rules .

在您的情况下,最简单的解决方案似乎是将世界可读的帖子放在一个单独的顶级节点下,您可以在其中授予每个人读取访问权限:

posts:
-KK-3ajDuSUglnMMdXgy
authorId: "DYIciaiew98acohzxvx09qw"
authorName: "puf"
text: "Only authenticated users can write this"
publicPosts:
-KK-3ajDuSUglnMMdXgy
authorId: "DYI4TPbwQocFsVROStUqcGNFHhW2"
authorName: "john"
text: "Everyone can read this"

这些规则:

{
"rules": {
"posts": {
".read": "auth != null",
".write": "auth != null"
}
"publicPosts": {
".read": true,
".write": "auth != null"
}
}
}

关于ios - 无法理解 Firebase 数据库规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37765765/

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