Firebase数据库:添加规则以查找所有子项中的特定值

时间:2017-08-14 20:59:56

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

我想为我的数据库设置安全规则,我只希望用户管理员从这个特定的组中读取,但我的规则不起作用。

设置特定索引时唯一的工作。我不知道如何检查所有索引。这有可能吗?

数据库: database

规则:

{
  "rules": {
    "groups": {
      "$groupid": {
        ".write": "!data.exists()",
        ".read": "data.child('users').child('$index').val() == auth.uid || data.child('admins').child('$index').val() == auth.uid"
      }
    },
    "users": {
      "$uid": {
        ".read": "auth != null",
        ".write": "$uid === auth.uid"
      }
    }  
  }
}

1 个答案:

答案 0 :(得分:1)

我建议你把数据库结构改成这样的东西。将用户的ID设置为usersadmins

的子键
{
    "groups": {
        <groupId1>: {
            "admins": {
                <uid1>: true,
                <uid2>: true
            },
            "description": "some description",
            "users": {
                <uid3>: true,
                <uid4>: true,
                <uid5>: true
            },
            ...
        },
        <groupId2>: {
            ...
        }
    }
}

然后这个数据库规则将完成工作

{
    "rules": {
        "groups": {
            "$groupid": {
                ".write": "!data.exists()",
                ".read": "data.child('users').child(auth.uid).val() == true || data.child('admins').child(auth.uid).val() == true"
            }
        }
    }
}

希望这会有所帮助:)