Firebase:如何为不同用户提供读/写访问权限?

对于启用基于电子邮件/密码的身份验证的Firebase数据库,我们如何授予对登录Firebase支持的iOS应用程序的用户的读/写访问权限。 尽管Firebase iOS sdk公开auth api来创建/登录/注销用户,但是我无法在firebase sdk中找到任何可以为用户提供读访问权限或写权限的api。 让我们假设我使用api创建了两个用户user1,user2。 我如何授予对user1的读取访问权限和对user2的读取/写入访问权限。 所需的访问权限在整个数据库上。 是否可以通过安全规则(只能通过谷歌Firebase控制台中数据库选项卡下的规则部分中的JSON提供)? 如果是,我们如何为不同的用户创建这样的读/写访问权限? 如果可以通过Firebase iOS SDk,然后使用哪个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写入权限授予$requestor/friends/$targetUid 。 这允许接收到好友请求的人将他们的OWN 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要求成为他们的朋友,所以他们首先向users/200/friends添加100。 这是允许的,因为auth.uid将是200,并且它们具有对整个users/200节点及其所有子节点的完全读/写访问权限。

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

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

auth.uid将为200,并且支票将看到100要求成为200的朋友,因为friendRequests/200/100存在,并且该节点只能由用户100写入。

链接地址: http://www.djcxy.com/p/84223.html

上一篇: Firebase: How to provide read/write access to different users?

下一篇: How to allow read and write access to only auth users in Firebase?