#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