Firebase规则:权限被拒绝

时间:2020-02-23 13:54:06

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

我正在尝试将用户访问权限限制在某些高级节点上,但希望使某些用户能够读取某些子节点。

我的数据结构是这样的:

{
  "COMPANIES" : {
    "COMPANY1" : {
      "id" : "COMPANY1",
      "name" : "COMPANY1 COMPANY"
    },
    "COMPANY2" : {
      "id" : "COMPANY2",
      "name" : "COMPANY2 COMPANY"
    }
  },

  "USERS" : {
    "xZgFtwVyQFsPK3428YCa3NekOEF3" : {
      "company" : {
        "COMPANY1" : true,
        "COMPANY2" : true
      },
      "email" : "ss@sss.com",
      "uid" : "xZgFtwVyQFsPK3428YCa3NekOEF3",
      "username" : ""
    }
  }
}

以此类推。

还有我的规则:

{
  "rules": {
    "USERS": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid"
      }
    },

    "COMPANIES": {
      "COMPANY1": {
        ".read": "root.child('USERS').child(auth.id).child('company').child('COMPANY1').val() == true",
        ".write": false
      }
    }
  }
}

我用于访问此数据的代码如下所示(在Swift中):

refFire.child("COMPANIES").child("COMPANY1").observe(DataEventType.value, with: { (dsnap) in

另外,我尝试了这个:

refFire.child("COMPANIES").queryOrdered(byChild: "COMPANY1").queryEqual(toValue: "COMPANY1").observe(DataEventType.value, with: { (dsnap) in

还有一个(不幸的是,我不太了解queryEqual背后的想法,所以我尝试了不同的方法):

refFire.child("COMPANIES").child("COMPANY1").queryOrdered(byChild: "COMPANY1").queryEqual(toValue: "COMPANY1").observe(DataEventType.value, with: { (dsnap) in

因此,我想授予个人资料中带有COMPANY1 = true的用户访问COMPANY1(并拒绝其他所有人)。规则似乎相对简单明了,但显然我在这里做错了,因为即使使用COMPANY1 = true的用户也无法读取公司信息,该权限也被拒绝。

0 个答案:

没有答案