Firebase - 限制特定用户的文件访问权限

2023-12-12

我正在尝试使用 Firebase 实现以下行为:

  • 用户使用 Firebase 身份验证登录
  • 用户将文件上传到 Firebase 存储
  • 用户输入不同用户的电子邮件地址。该用户帐户可能已经存在。如果没有,收件人会收到一封电子邮件,提示他们注册。
  • 上传的文件现在应该仅可供上传该文件的用户(读/写)和具有上述电子邮件地址的其他用户(只读)使用。

这是我到目前为止一直在尝试的:

  • 使用 FirebaseAuth 注册后,我存储用户的电子邮件地址并uid在实时数据库中。
  • 用户上传文件并输入收件人的电子邮件地址后,我会在实时数据库中检查该地址。如果存在,我检索收件人的uid并将其存储在文件的元数据中。
  • 在我的 Firebase 存储安全规则中,我检查是否auth.uid匹配uid存储在文件元数据中。

这应该可以正常工作,但是如果用户帐户尚不存在怎么办?

  • 我可以在用户输入收件人的电子邮件地址后创建一个新帐户。但如果我这样做,我必须指定一个密码。我可以指定一个随机密码并使用密码重置电子邮件,但这不是良好的用户体验,还因为您无法完全自定义重置电子邮件。

  • 如果我不立即创建新帐户,如何确保只有拥有此电子邮件地址的用户才能访问该文件?将电子邮件地址存储在文件的元数据中不起作用,因为它稍后可能会更改。

我有一种感觉,我想得太复杂了。有没有更简单的方法来实现这一目标,或者我忽略了什么?

编辑:我已经进行了更多调查,我认为一种方法是使用自定义身份验证令牌,这是 Firebase 存储指南建议的here。但这需要我设置自己的身份验证服务器,这从一开始就违背了使用 Firebase 身份验证的目的。有没有更简单的方法来实现这一目标?


这应该相当简单:

files
  file_id_0
    file_name: My File
    read_write: uid_0
    read_only:
      uid_1: true
      uid_2: true

当然你还有用户

users
  uid_0
    name: Larry
    email: [email protected]
  uid_1
    name: Curly
    email: cur[email protected]
  uid_2
    name: Moe
    email: [email protected]

以及一些巧妙的概念规则

rules
  .read: false
  .writ: false
  files
    $file_id
      //give the person that uploaded the file read access to this node as well as
      //  any user id that exists in the read_only node
      .read: root.child('files').child($file_id).child('read_write').val = auth.uid ||
            root.child('files').child($file_id).child("read_only').child(auth.uid) = true
     //write access only to the user that created it
     .write: root.child('files').child($file_id).child('read_write').val = auth.uid

非常接近了。

因此,当 uid_0 上传文件“我的文件”时,它会存储在 file_id_0 中。然后,该用户通过电子邮件“邀请”另一个用户(假设他们存在)访问该文件。在本例中,uid_0 邀请 uid_1 和 uid_2,并且这些用户 ID 被写入 file_id_0 节点。这些可以通过查询这两个用户的 /users 节点来获得。

症结在于邀请另一个尚不存在的用户。

我认为他们在那里玩的是有一个电子邮件观察列表节点。

watch_list
   uid_0
     [email protected]:  file_id_0

每个用户都会观察用户节点,并观察其监视列表中是否存在新添加的用户电子邮件(uid_0 正在监视[电子邮件受保护])。然后将它们添加到 file_id_0 /read_only 节点并将其从监视列表中删除。

看看我刚刚写的,有点不优雅,所以可能有更好的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase - 限制特定用户的文件访问权限 的相关文章

随机推荐