Firebase 数据库规则中的通配符

Posted

技术标签:

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

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

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

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

例如,


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

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


"rules": 
    "products_*": 
        <rules>
    

谢谢。

【问题讨论】:

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

【讨论】:

以上是关于Firebase 数据库规则中的通配符的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 云函数中的通配符获取数据

如何在 Firebase 中使用通配符?

如果已知通配符,Firebase会使用通配符来读取数据

我可以在 JSF 导航规则中使用通配符 * 吗?

对于 Firebase 动态链接,如果您使用 IOS 通配符,您应该为团队 ID 输入啥?

Makefile规则③规则语法依赖通配符目录搜寻目标