热门标签 | 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 
         }
      }
    }

推荐阅读
  • poj 3352 Road Construction ... [详细]
  • Halcon之图像梯度、图像边缘、USM锐化
    图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像卷积:1.模糊2.梯度3.边缘4.锐化1.视频教程:B站、 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 本报告对2018年湘潭大学程序设计竞赛在牛客网上的时间数据进行了详细分析。通过统计参赛者在各个时间段的活跃情况,揭示了比赛期间的编程频率和时间分布特点。此外,报告还探讨了选手在准备过程中面临的挑战,如保持编程手感、学习逆向工程和PWN技术,以及熟悉Linux环境等。这些发现为未来的竞赛组织和培训提供了 valuable 的参考。 ... [详细]
  • Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题
    Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
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社区 版权所有