Правила безопасности в 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 устанавливает разрешения для каждого отдельного элемента.

Но правила безопасности каскадные, поэтому вам нужно установить правила только для верхнего уровня.

Для получения дополнительной информации прочтите документацию по каскадированию. < / strong>

person David East    schedule 20.12.2015
comment
Благодаря тонну. Теперь я понимаю, что это операция чтения, которую я выполнял неправильно. - person Hardik Sondagar; 21.12.2015