Правила за сигурност във Firebase

Имам структура на база данни като

 appointments
     [$userId]
         [$appointmentId]
              message:"something"
              date:"14/12/2015"
 users
    [$userId]
        name: Hardik
        email: [email protected]

И аз използвам библиотека angularfire на Firebase, опитвам се да огранича операцията за четене въз основа на uid (означава, че човек, който е създал среща, може да прочете това). Опитах се да следвам правилата за сигурност

{
  "rules": {
    "appointments": {
      "$userId":{
        "$appointmentId":{
         ".read": "auth.uid==$userId",
         ".write": true
        }
      }
    },
    "users": {
      "$userId":
        {
          ".read": "auth!=null && $userId === auth.uid",
          ".write": "auth!=null && $userId === auth.uid"
        }
    }
  }

Но стигаме до тази грешка Грешка: permission_denied: Клиентът няма разрешение за достъп до желаните данни.

Опитвам се да получа достъп до всички срещи на потребителя, като използвам следния код

 var ref = new Firebase("https://<FIREBASE-APP>.firebaseio.com/appointments/"+uid);
 $scope.appointments = $firebaseArray(ref);

person Hardik Sondagar    schedule 20.12.2015    source източник


Отговори (1)


Задайте правила за заместващия знак $uid, за да прочетете всички деца.

"appointments": {
  "$uid":{
    ".read": "auth.uid == $uid",
    ".write": "auth.uid == $uid",
  }
}

Заместващият знак $uid задава разрешения за целия списък, докато заместващият знак $appointmentId задава разрешения за всеки отделен елемент.

Но правилата за сигурност са каскадни, така че трябва да зададете правилата само за най-високото ниво.

Прочетете документите за каскадиране за повече информация.< /силен>

person David East    schedule 20.12.2015
comment
Благодаря много. Сега разбирам, че това е операцията за четене, която изпълнявах по грешен начин. - person Hardik Sondagar; 21.12.2015