Правила Firebase для предоставления разрешения на чтение на основе других связанных данных не работают

#firebase #firebase-realtime-database #firebase-security

#firebase #firebase-realtime-database #firebase-безопасность

Вопрос:

Итак, я создаю приложение календаря с использованием Firebase, и я столкнулся с небольшой проблемой.

Моя структура БД выглядит следующим образом:

 - calendar
  - $year
    - $month
      - $day
        - $uid
          - name
          - arrivalStatus
- users
  - $uid
    - name
    - team
  

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

 {
 "rules": {
   "users": {
      "$uid": {
        ".read": "auth != null amp;amp; auth.uid == $uid",
        ".write": "auth != null amp;amp; auth.uid == $uid"
      }
   },
   "calendar": {
    "$year":{
     "$month":{
       "$day":{
        "$uid":{
          ".read": "auth != null amp;amp; 
                    root.child('users/' auth.uid '/team').exists() amp;amp; 
                    root.child('users/' $uid '/team').val() == root.child('users/' auth.uid '/team').val()",
          ".write": "auth != null amp;amp; auth.uid == $uid"
          }
        }
      }
    }
  }
 }
}
  

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

Редактировать:

Итак, в принципе, давайте предположим, что этот набор данных:

 -firecalender
 -calendar
  -2016
   -9
    -30
     -gsdfgd
      -Name: "MG"
      -Status:"PM"
-users
  -abcd
    -name: "Tester"
    -team: "bc"
  -efg
    -name: "noteam"
    -team: "funny inc"
  -gsdfgd
    -name: "bossman"
    -team : "bc"
  

В этой ситуации abcd должен иметь возможность считывать информацию каждого gsdfgd внутри Календаря, но efg должен быть запрещен доступ.

Комментарии:

1. Вы пытались изменить имя $uid в правилах безопасности. Прямо сейчас вы используете $uid в двух местах, возможно, firebase не видит разницы.

2. Можете ли вы показать операцию (с точным путем, данными и активным идентификатором пользователя), которую вы хотели бы завершить, и базовые данные, для которых она выполняется успешно?

3. В основном календарь/2016/9/30/ gsdfgd/ должен быть разрешен, если UID равен abcd или gsdfgd, но должен быть запрещен, если UID равен efg

Ответ №1:

Я думаю, ваша проблема в том, что вы используете == вместо === .

Ссылка для примеров: https://firebase.google.com/docs/database/security/user-security