【问题标题】:How to apply firebase storage rules so only admin can access a folder如何应用 Firebase 存储规则,以便只有管理员可以访问文件夹
【发布时间】:2021-09-21 05:29:42
【问题描述】:

我有如下结构。子文件夹从根开始遵循相同的结构。如何将 Firebase 存储规则设置为仅允许管理员添加/编辑/删除私有子文件夹并允许我的应用程序中的任何人读取公共子文件夹?

Root >> folder 1 >> public subfolder
                >> private subfolder
...

     >> folder n >> public subfolder
                >> private subfolder

【问题讨论】:

  • 也许您想编辑问题以显示您现在拥有的不按您期望的方式工作的规则,以及访问它们的代码?文档中有很多示例可供参考。您需要自己定义和实现“管理员”的含义。这不是安全规则本机为您提供的概念。 firebase.google.com/docs/rules/basics
  • 这取决于您所说的“管理员”是什么意思。您是否尝试指定用户角色?

标签: firebase firebase-storage firebase-security


【解决方案1】:

最好的方法是使用Firebase custom claims这些提供了在 Firebase 应用中实施各种访问控制策略的能力,包括基于角色的访问控制。

您必须向您的用户添加“管理员”声明。只有 Admin SDK(必须在云功能或您自己的服务器等安全环境中使用)才能添加这些自定义声明。您可以参考this answer 了解添加自定义声明的简单示例。向相关用户添加“管理员”声明后,您可以尝试以下安全规则:

match /{folderName}/private {
  allow read, write: if request.auth != null && request.auth.token.admin;
}

match /{folderName}/public {
  allow read: if true;
}

【讨论】:

  • {folderName} 是 Firebase 规则系统识别的标准变量吗?
  • @fractal 不,这只是一个匹配任何匹配路径的通配符。你可以重命名它。
  • 我正在使用带有 firebase 身份验证的颤振,当使用谷歌提供程序登录时,它会发送数据的有效负载。注册用户也单独存储在 Firestore 集合中。因此,除了自定义声明(和云功能)之外,没有更简单的方法来表明它是这个单独的集合中存在的用户来表明他们已经注册?我希望 firebase auth 将成为一站式商店(因为他们将在我的 Flutter 网络/移动应用程序上使用 firebase auth 机制登录)。我正在使用这种技术:firebase.flutter.dev/docs/auth/usage
  • 如果不是“&& request.auth.token.admin;”怎么办您放置了一些伪逻辑来检查用户是否存在于具有特定角色的集合中?自定义声明和数据库查找有什么区别?
  • @fractal no.这只有在 Firestore 的规则中才有可能。您无法在 Firebase 存储的安全规则中读取 Firestore 中的数据。
猜你喜欢
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2021-09-16
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
相关资源
最近更新 更多