火力点:如何提供阅读不同用户/写访问?

问题描述 投票:3回答:1

对于是有启用基于电子邮件/密码验证,我们怎样授予读签到谁的火力地堡用户/写访问的Firebase Database支持的iOS应用。虽然火力地堡的iOS SDK暴露身份验证API来创建/登入/ signout用户,但我无法找到火力SDK任何API,可以提供读取访问或写入访问的用户。

让我们假设我创建两个用户USER1,用户2使用API​​。我怎样授予读取访问user1和读取到用户2 /写访问。所需的访问是整个数据库。

是否有可能通过Security Rules只(通过JSON的规则节在谷歌火力控制台中提供的数据库选项卡下)?如果是,我们如何能够建立这样一种针对不同用户的读/写访问?如果通过火力地堡的iOS SDK可再使用的API?

谢谢

ios firebase firebase-realtime-database firebase-authentication firebase-security
1个回答
6
投票

这是我很难理解下手,但是规则非常灵活,让您根据其他数据库内容的数据库存取。基本上你授予访问节点和津贴适用于所有的孩子们,不能从树更深节点删除。您可以在控制台应用这些数据库规则,但如果你需要使用它,以及设定的规则对整个数据库,必须有一个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节点,以便他们能读它,因为它是一个孩子,但不会写。

然后,你可以允许写入访问基于$requestor/friends/$targetUid存在于friendRequests/targetUid/requestorUid至$ 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和说,UID 100愿意与UID 200的朋友,他们会写自己的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,他们必须对整个users/200节点及其所有子全读/写访问。

接着,他们也可以写信给users/100/friends/200,因为这条规则:

"root.child('friendRequests').child($friendId).child($uid) && auth.uid === $friendId"

auth.uid将是200和检查将看到100问,因为friendRequests/200/100存在,并且该节点是只能由用户100写成为朋友200。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.