热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

允许仅由某些用户访问Firebase存储存储桶-AllowFirebaseStorageBuckettobeaccessedonlybysomeusers

Ihaveamainfolderinmystoragedirectorycalledusers-projectsandthenIcreatefoldersfore

I have a main "folder" in my storage directory called users-projects and then I create folders for every users' projects. I want to allow the users to access only their projects and the projects they are invited in, like a Dropbox or Google Drive folder with collaborators.

我的存储目录中有一个名为users-projects的主“文件夹”,然后我为每个用户的项目创建文件夹。我想允许用户仅访问他们的项目以及邀请他们参与的项目,例如带有协作者的Dropbox或Google Drive文件夹。

In the Documentation they says:

他们在文档中说:

Include group information (such as a group ID or list of authorized uids) in the file metadata

在文件元数据中包括组信息(例如组ID或授权uid列表)

So here is my questions:

所以这是我的问题:

  • Can I do this directly with the folder?
  • 我可以直接使用该文件夹吗?

  • How can I store the list of authorized uids?
  • 如何存储授权uid列表?

I am programming an iOS app in Swift.

我正在使用Swift编写iOS应用程序。

Here is my actual code for the Rules:

这是我的规则的实际代码:

service firebase.storage {
  match /b/on-team.appspot.com/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
    match /users-projects {
        match /{projectId} {
        allow read, write: if ?????
      }
    }
  }
}

Here is the official documentation: https://firebase.google.com/docs/storage/security/user-security .

以下是官方文档:https://firebase.google.com/docs/storage/security/user-security。

2 个解决方案

#1


5  

I think the correct static rule would be :

我认为正确的静态规则是:

allow read, write: if request.auth.uid == 'a-user-id' || request.auth.uid == 'another-user-id' || ...

But I guess you are looking for dynamic rules :)

但我猜你正在寻找动态规则:)

For the owners it's quite simple to setup a dynamic rule with the folder name :

对于所有者来说,使用文件夹名称设置动态规则非常简单:

match /users-projects/{projectId}/{userId} {
    allow read, write: if request.auth.uid == userId 

For more complex cases like invited users, you can try using the custom metadata to store invited uids in the file, and match them against user id accessing that ressource, example rule:

对于受邀用户等更复杂的情况,您可以尝试使用自定义元数据在文件中存储受邀的uid,并将其与访问该资源的用户ID进行匹配,例如:

allow read: if resource.metadata.invited.matches(request.auth.uid);

The custom metadata values can only be strings, so I suggest you store them as coma-separated value so you can edit them easily, and at the same time use a simple match in the access rule.

自定义元数据值只能是字符串,因此我建议您将它们存储为逗号分隔值,以便您可以轻松编辑它们,同时在访问规则中使用简单匹配。

Note: this is only scalable while invitedUids.join(',') length is shorter than maximum length of custom metadata values. (I don't know that value). If your app is not built to accept hundreds of invited users, it should be ok, otherwise you might need to setup a server-side access mecanism which build a unique download link for each invited user, instead of relying on simple rules.

注意:这只是可扩展的,而inviteUids.join(',')的长度小于自定义元数据值的最大长度。 (我不知道那个价值)。如果您的应用程序不是为了接受数百个受邀用户而构建的,那么它应该没问题,否则您可能需要设置服务器端访问机制,为每个受邀用户构建一个唯一的下载链接,而不是依赖于简单的规则。

Also, I don't think you can use token groupId value to enforce access security in your case (as depicted in the docs), because you have a many-to-many relationship between users and folders/files. (users will not belong to only one group)

此外,我认为您不能使用令牌groupId值来强制执行您的案例中的访问安全性(如文档中所述),因为您在用户和文件夹/文件之间存在多对多关系。 (用户不仅属于一个组)

So, to answer your questions:

那么,回答你的问题:

  • The resource object in the rules only apply to files, if using metadata to enforce access, they need to be updated on each file in the folder if they share the same access rules
  • 规则中的资源对象仅适用于文件,如果使用元数据来强制访问,如果它们共享相同的访问规则,则需要更新文件夹中的每个文件

  • The metadata is just a string->string key-value store, you just need to store user ids as a string in a arbitrary non-reserved key, as explained above.
  • 元数据只是一个字符串 - >字符串键值存储,您只需将用户ID作为字符串存储在任意非保留键中,如上所述。

#2


1  

Store individual project in a directory using their userid

使用用户标识将单个项目存储在目录中

  • /users-projects/user_id/project1
  • /users-projects/user_id/project2


     service firebase.storage {
         match /b/on-team.appspot.com/o {
           match /{allPaths=**} {
             allow read, write: if request.auth != null;
           }
         match /users-projects/{user_id} {
             allow read, write: if request.auth.uid == user_id 
         }
      }
    }

推荐阅读
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 探讨如何利用Visual Basic (VB) 将十六进制或二进制字符串写入Windows注册表的方法。 ... [详细]
  • 解决 IIS 无法访问 .pnts 文件的问题
    本文详细介绍了在使用 IIS 服务器时遇到的 .pnts 文件无法访问的问题及其解决方案。通过正确配置 MIME 类型,可以轻松解决这一常见问题。 ... [详细]
  • 本文详细解释了网络服务质量(QoS)中的关键参数,包括承诺信息速率(CIR)、峰值信息速率(PIR)、承诺突发尺寸(CBS)以及峰值突发尺寸(PBS),并提供了这些参数在实际配置中的应用示例。 ... [详细]
  • 正在学习操作系统开发,遇到一个内核在GRUB Legacy(0.97)中无法成功引导的问题。具体表现为输入内核命令后显示错误信息,尝试引导时GRUB挂起。 ... [详细]
  • 随着物联网技术的快速发展,NB-IoT(窄带物联网)作为一项关键的技术,正逐步成为实现大规模设备互联的重要手段。本文将详细介绍NB-IoT技术的特点、应用场景及其在实际项目中的应用实例。 ... [详细]
  • 本文旨在探讨计算机机房的有效管理与维护方法,包括合理的机房布局设计、高效的操作系统安装与恢复技术以及数据保护措施。随着信息技术教育的发展,计算机机房作为教学的重要组成部分,其稳定性和安全性直接影响到教学质量。文章分析了当前机房管理中存在的问题,并提出了针对性的解决方案。 ... [详细]
  • MySQL磁盘空间满的解决方案及预防措施
    本文介绍了一个案例,其中MySQL服务器的磁盘使用率达到100%,仅剩余几十兆空间。通过一系列操作,包括备份数据库、删除实例、删除数据库表以及重启MySQL服务,但未能有效释放磁盘空间。文章进一步探讨了可能的原因和最终解决问题的方法。 ... [详细]
  • DropBlock:一种卷积网络的正则化技术
    本文详细探讨了DropBlock这一正则化方法在卷积神经网络中的应用与效果。通过结构化的dropout方式,即在特征图中连续区域内的单元同时被丢弃,DropBlock有效解决了传统dropout在卷积层应用时效果不佳的问题。更多理论分析及其实现细节可参考原文链接。 ... [详细]
  • 万事起于配置开发环境
    万事起于配置开发环境 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文详细介绍了Java库com.powsybl.afs.storage中的NodeGenericMetadata.getBooleans()方法,并提供了多个实际应用的代码示例。 ... [详细]
  • 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]
author-avatar
业余爱好者
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有