Firebase数据库规则中的通配符

Ahs*_*san 3 firebase firebase-security firebase-realtime-database

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

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

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

例如,

{
"rules": {
    "products_A": {
        <rules>
    },
    "products_B": {
        <rules>
    }
}
Run Code Online (Sandbox Code Playgroud)

我想只有一套规则,如:

{
"rules": {
    "products_*": {
        <rules>
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Jay*_*Jay 9

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

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,$ 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
Run Code Online (Sandbox Code Playgroud)

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

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

这会将对每个组节点的访问限制为在Allowed_Users节点中指定的某组用户.Firebase数据库中的数据可能如下所示:

Groups
   group_0
     //data
   group_1
     //data


Allowed_Users
   uid_0: group_0
   uid_1: group_0
Run Code Online (Sandbox Code Playgroud)

在此示例中,用户uid_0和uid_1可以读/写group_0但不能读/写group_1