Правила Firebase: разрешение запрещено - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь ограничить доступ пользователей к какому-либо высокоуровневому узлу, но хочу дать некоторым пользователям возможность читать некоторые из подузлов.

Моя структура данных выглядит так:

{
  "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 пользователям с COMPANY1 = true в своем профиле (и запретить всем остальным). Правила казались относительно простыми, но, очевидно, я здесь что-то не так делаю, потому что даже пользователи с COMPANY1 = true не могут читать информацию о компании, в разрешении отказано.

...