Ios Firebase:如何为不同的用户提供读/写访问权限?
对于启用了基于电子邮件/密码的身份验证的Ios Firebase:如何为不同的用户提供读/写访问权限?,ios,firebase,firebase-realtime-database,firebase-authentication,firebase-security,Ios,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,对于启用了基于电子邮件/密码的身份验证的Firebase数据库,我们如何向登录Firebase支持的iOS应用程序的用户授予读/写访问权限。虽然Firebase iOS SDK公开了用于创建/登录/注销用户的auth api,但我在Firebase SDK中找不到任何可以为用户提供读访问或写访问的api 假设我使用api创建了两个用户user1和user2。如何授予user1读访问权限和user2读/写访问权限。所需的访问权限位于整个数据库上 是否仅通过安全规则(通过google firebas
Firebase数据库
,我们如何向登录Firebase支持的iOS应用程序的用户授予读/写访问权限。虽然Firebase iOS SDK公开了用于创建/登录/注销用户的auth api,但我在Firebase SDK中找不到任何可以为用户提供读访问或写访问的api
假设我使用api创建了两个用户user1和user2。如何授予user1读访问权限和user2读/写访问权限。所需的访问权限位于整个数据库上
是否仅通过安全规则
(通过google firebase控制台数据库选项卡下规则部分中的JSON提供)就可以实现?如果是,我们如何为不同的用户创建这种读/写访问?
如果可以通过Firebase iOS SDK,那么使用哪种api
谢谢开始时我很难理解,但规则非常灵活,允许您基于其他数据库内容访问数据。基本上,您授予对一个节点的访问权,该授权也适用于所有子节点,并且不能从树中更深的节点删除。您可以在控制台中应用这些数据库规则,但如果您还需要使用api为整个数据库设置规则,则必须有api。它们必须是单个文档,因此您不想硬编码用户,但您可以将它们放在一个隐藏且不可访问的节点中,规则可以访问它 例如,假设您想让人们请求与其他人成为朋友,让其他人能够接受并将这两个人添加到朋友列表中。您可以使用类似于以下内容的模式:
uid
"friends"
friendUid1
friendUid2
friendUid3
"private"
... some private data your friends can read
"friendRequests"
targetUid
requestorUid -> can be written to only by requestorUid
第一步是将值写入friendRequests/$targetUid/$requestorUid
。唯一可以写入此节点的人是作为requestorUid进行身份验证的人。targetUid将被授予对targetUid节点的读取权限,这样他们就可以读取它,因为它是一个子节点,而不是写入它
然后,您可以根据friendRequests/targetUid/requestorUid
的存在,将对$requestor/friends/$targetUid
的写访问权限授予$targetUid。这允许收到好友请求的人将自己的uid写入请求者的好友列表,但前提是请求者已经在成为好友的请求中写入了自己的uid。然后,他们会将请求者的uid写入自己的好友列表。如果登录用户的uid在其好友列表中,则他们可以访问私人数据
{
"rules": {
"$uid": {
".read": "auth.uid === $uid",
".write": "auth.uid === $uid",
"friends": {
"$friendId": {
".write": "root.child('friendRequests').child($friendId).child($uid) && auth.uid === $friendId"
}
},
"private": {
".read": "data.parent().child('friends').child(auth.uid).exists()"
}
},
"friendRequests": {
"$targetUid": {
".read": "auth.uid === $targetUid",
"$requestorUid": {
".write": "auth.uid === $requestorUid"
}
}
}
}
}
让我们使用一些“真实”的ID,并说UID100想与UID200成为朋友。他们将自己的id 100写入200的请求,这是允许的,因为auth.uid将匹配$requestorUid并匹配上一个写入规则:
ref = db.getReference("friendRequests/200/100");
ref.setValue(true);
当用户id 200登录时,他们可以在friendRequests/200
上读取所有好友请求。他们看到用户100请求成为他们的朋友,所以他们首先将100添加到users/200/friends
。这是允许的,因为auth.uid将是200,并且它们对整个用户/200
节点及其所有子节点具有完全读/写访问权限
接下来,他们还可以向用户/100/friends/200
写信,因为这条规则:
"root.child('friendRequests').child($friendId).child($uid) && auth.uid === $friendId"
auth.uid
将是200,检查将看到100请求与200成为朋友,因为friendRequests/200/100
存在,并且该节点只能由用户100写入。Firebase数据库的安全模型在此处的文档中讨论:。它在Firebase服务器上强制执行,因此不特定于您的iOS客户端。我建议您研究文档,尝试使其适用于您的用例,如果您在实现规则时遇到问题,请回到这里。