firebase - 如何在 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'工作?或者有人可以推荐另一种处理文件访问权限的方法,我可以为每个文件赋予可变数量的用户权限?
解决方案
不使用名为 的键user0
,而是使用用户的实际 UID 作为元数据键,并为其分配一些虚拟值,例如“1”。现在您的规则更容易编写。它可能是这样的:
allow read: if resource.metadata[request.auth.uid] == "1";
您可以拥有尽可能多的用户,以适应可编辑的元数据有效负载。
推荐阅读
- r - R dplyr 计算2组内的第一个差异
- javascript - Youtube 视频嵌入不适用于 Android 上的原生反应
- reactjs - 使用 formik、yup 和 axios 去抖动
- git - 获取推送更改的更改分支的名称,Jenkins 管道脚本
- r - 使用 rvest 添加新字段以形成表单
- javascript - 在 ASP.NET 中获取 JavaScript 或 jQuery 中的 RadNumericTextBox 的值
- python - 大熊猫忽略 NaN 的成对欧几里得距离
- javascript - 类似 vlookup 的 javascript 将输入值从一个字段映射到另一个字段
- math - 使用迭代函数和时间步对物理模拟进行编码
- javascript - 在单独的文件中共享通用常量和日志函数