首页 > 解决方案 > 如何在 Firebase 存储规则中设置多个用户权限

问题描述

我正在使用 firestore 构建一个网络应用程序,允许用户在项目中进行合作并在每个项目中共享文件。我正在尝试设置 firebase 存储规则来控制用户对每个文件的读取权限,因此只有参与项目的用户才能读取该文件。我将有权读取文件的每个用户的 UID 写入元数据,因此元数据自定义数据包含值对,例如:'user0':uid0、'user1':uid1 等。我的问题是如何设置仅允许元数据中具有其 uid 的用户读取文件的存储规则。我尝试过这样的事情:

allow read: if request.auth.uid in resource.metadata;

但它不起作用。我唯一能上班的是:

 allow read: if request.auth.uid == resource.metadata.user0 ||
                                 request.auth.uid == resource.metadata.user1 ||
                     request.auth.uid == resource.metadata.user2 ||
                     request.auth.uid == resource.metadata.user3 ||
                     request.auth.uid == resource.metadata.user4 ||
                     request.auth.uid == resource.metadata.user5 ||
                     request.auth.uid == resource.metadata.user6 ||
                     request.auth.uid == resource.metadata.user7 ||
                     request.auth.uid == resource.metadata.user8 ||
                     request.auth.uid == resource.metadata.user9;

但是我必须预先决定有多少用户可以共享一个文件,这不能满足我的项目要求。

有没有办法让'如果resource.metadata中的request.auth.uid'工作?或者有人可以推荐另一种处理文件访问权限的方法,我可以为每个文件赋予可变数量的用户权限?

标签: firebasefirebase-storagefirebase-security

解决方案


不使用名为 的键user0,而是使用用户的实际 UID 作为元数据键,并为其分配一些虚拟值,例如“1”。现在您的规则更容易编写。它可能是这样的:

allow read: if resource.metadata[request.auth.uid] == "1";

您可以拥有尽可能多的用户,以适应可编辑的元数据有效负载。


推荐阅读