对于启用了基于电子邮件/密码的身份验证的firebase数据库,我们如何授予登录Firebase支持的iOS应用程序的用户的读/写访问权限 . 虽然Firebase iOS sdk公开auth api来创建/ signin / signout用户,但我找不到firebase sdk中的任何api,它可以提供对用户的读访问权限或写访问权限 . 让我们假设我使用api创建了两个用户user1,user2 . 如何授予对user1的读访问权限和对user2的读/写访问权限 . 所需的访问权限在整个数据库中 . 是否可以通过安全规则(仅通过google firebase控制台中“数据库”选项卡下的“规则”部分中的JSON提供)?如果是,我们如何为不同的用户创建这种读/写访问?如果可以通过Firebase iOS SDk然后使用哪个api?
谢谢
1 回答
开始时我很难理解,但规则非常灵活,您可以根据其他数据库内容访问您的数据 . 基本上,您授予对节点的访问权限,并且该授权也适用于所有子节点,并且无法从树中的更深节点中删除 . 您可以在控制台中应用这些数据库规则,但是如果您还需要使用它来设置整个数据库的规则,则必须有api . 它们必须是单个文档,因此您不希望对用户进行硬编码,但是您可以将它们放在隐藏且无法访问的节点中,规则可以访问它 .
例如,假设您希望让人们请求与其他人成为朋友,并让其他人能够接受并将这两个人添加到朋友列表中 . 你可以有一个类似于这样的架构:
第一步是将值写入
friendRequests/$targetUid/$requestorUid
. 可以写入此节点的唯一人员是经过身份验证的requestorUid . targetUid将被授予对targetUid节点的读访问权限,以便他们可以读取它,因为它是一个子节点,但不能写它 .然后,您可以根据
friendRequests/targetUid/requestorUid
的存在将$requestor/friends/$targetUid
的写访问权授予$ targetUid . 这允许收到朋友请求的人将他们的OWN uid写入请求者's friend list, but only if the requestor had already write their own uid in a request to be a friend. They would then write the requestor' sid到他们自己的朋友列表 . 如果登录用户的uid位于其朋友列表中,则他们可以访问私有数据 .让我们使用一些“真正的”id并说uid 100想要与uid 200成为朋友 . 他们会将自己的id 100写为200的请求,这是允许的,因为auth.uid将匹配$ requestorUid并匹配最后一次写入规则:
当用户ID 200登录时,他们可以在
friendRequests/200
读取他们所有的朋友请求 . 他们看到用户100要求成为他们的朋友,所以他们首先将100添加到users/200/friends
. 这是允许的,因为auth.uid将为200,并且它们对整个users/200
节点及其所有子节点具有完全读/写访问权限 .接下来他们也可以写入
users/100/friends/200
,因为这个规则:auth.uid
将是200并且检查将看到100要求成为200的朋友因为friendRequests/200/100
存在并且该节点仅可由用户100写入 .