【问题标题】:Wildcard in Firebase database rulesFirebase 数据库规则中的通配符
【发布时间】:2017-04-30 20:35:03
【问题描述】:

我们可以在 Firebase 数据库规则中使用通配符吗?从我的实验来看,情况似乎并非如此。我错过了什么还是应该发生的事情?

因此,例如,我可能对所有 products_* 条目有相同的规则,使用通配符将它们组合在一起会更容易。

为了澄清,它是一个网络应用程序,我关心的是我们在控制台中设置的数据库权限。我们可以在那里使用通配符吗?

例如,

{
"rules": {
    "products_A": {
        <rules>
    },
    "products_B": {
        <rules>
    }
}

我希望只有一组规则,例如:

{
"rules": {
    "products_*": {
        <rules>
    }
}

谢谢。

【问题讨论】:

  • 请以文本形式发布您的规则,不要使用图片以及您尝试通过通配符完成的工作,因为可能有解决方案。
  • @Jay,更新澄清!
  • 我发布了一个了不起的答案,但是因为我突然忘记了如何阅读它,所以这个问题完全错误。在那张纸条上......仍然不清楚这个问题在问什么 - 大多数firebase规则使用占位符来引用封闭的父节点。也许您可以发布您当前的规则并描述您的目标。
  • 感谢您的时间和帮助。澄清了我的问题。

标签: firebase firebase-realtime-database firebase-security


【解决方案1】:

Firebase 提供用于表示 ID 和动态子键的通配符路径。例如,以下规则中的 $uid 是一个“通配符”,它允许该节点内的参数引用父节点。

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

在上面的示例中,$uid 是 /users 节点中每个用户节点的通配符路径。以下是上述规则在每个节点上的扩展方式

users
  uid_0 <--------|
                 V
    ".write": "uid_0 === auth.uid" //only user with uid = uid_0 can write
  uid_1
    ".write": "uid_1 === auth.uid" //only user with uid = uid_1 can write
  uid_2
    ".write": "uid_2 === auth.uid" //only user with uid = uid_1 can write

您可以对此进行扩展以提供更大的灵活性。假设您希望一组用户能够访问组节点。组规则可以是

  "rules": {
    "Groups": {
       "$group_id" : {
         ".read": "root.child('Allowed_Users/' + auth.uid).val() === $group_id",
         ".write": "root.child('Allowed_Users/' + auth.uid).val() === $group_id"
       }
    }

这会将每个组节点的访问权限限制在 Allowed_Users 节点中指定的特定用户集。 Firebase 数据库中的数据可能如下所示:

Groups
   group_0
     //data
   group_1
     //data


Allowed_Users
   uid_0: group_0
   uid_1: group_0

在这个例子中,用户 uid_0 和 uid_1 可以读/写 group_0 但不能读/写 group_1

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 2020-05-31
    • 1970-01-01
    • 2021-01-24
    • 2016-11-16
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2017-07-15
    相关资源
    最近更新 更多