如何在Firebase存储规则中设置多个用户权限

时间:2018-11-27 14:53:48

标签: firebase firebase-storage firebase-security-rules

我正在使用Firestore构建一个Web应用程序,该应用程序允许用户在项目上进行合作并在每个项目中共享文件。我正在尝试设置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”起作用?还是有人可以推荐另一种处理文件访问权限的方法,我可以为每个文件赋予可变数量的用户权限?

1 个答案:

答案 0 :(得分:2)

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

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

您可以容纳editable metadata个有效负载中的任意多个用户。