#firebase #firebase-realtime-database #firebase-security
#firebase #firebase-база данных в реальном времени #firebase-безопасность
Вопрос:
Я создаю систему чата, и в ней есть функция поиска, где я могу искать пользователей, если профиль пользователя является общедоступным. Моя структура базы данных firebase выглядит следующим образом.
users:{
$uid1:{
name:"John",
created:13739373,
type:"PRIVATE"
},
$uid2:{
name:"Susan",
created:12393930,
type:"PUBLIC"
},
$uid3:{
name:"Titan",
created:12582938,
type:"CLOSED"
}
}
Итак, я установил read
правило для пользователей следующим образом.
".read":"data.child('type').val()==='PUBLIC' || //if user is already friend, alse allow type CLOSED"
Как идеально настроить read
правило для пользователей, если тип — PUBLIC
или CLOSED
(если два пользователя уже являются друзьями). Я не могу установить read
правило в $uid
, потому что это функция поиска.
Редактировать: Это мой friends
путь.
friends:{
$uid1:{
$uid2: 1273738, //friend since timestamp
$uid3: 1274693,
$uid4: 1284869,
...
}
}
Правка 2: PUBLIC
это может видеть каждый, PRIVATE
это никто не может видеть / искать и CLOSED
это может видеть только друг.
Комментарии:
1. Могу ли я узнать путь к данным друга? Например, где хранятся сведения о пользователе и его / ее друзьях.
2. @Sushan Sapaliga Я обновил свой вопрос. Теперь, как я должен запросить свой поиск?
3. Спасибо за обновление вопроса. Я опубликую ответ на ваш запрос.
4. Существует 3 типа
type
:PUBLIC
,PRIVATE
иCLOSED
.PUBLIC
все могут видеть,PRIVATE
значит, только друзья могут видеть, и что насчетCLOSED
?5. Я опубликовал ответ, ожидая ваших разъяснений о
CLOSED
типе.
Ответ №1:
Правила firebase в реальном времени, которые вам необходимо обновить, это,
"users": {
"$user_id":{
".read": "data.child('type').val() == 'PUBLIC' || (data.child('type').val() == 'CLOSED' amp;amp; auth != null amp;amp; root.child('friends').child($user_id).child(auth.uid).val() > 0 ) || (data.child('type').val() == 'PRIVATE' amp;amp; auth != null amp;amp; $user_id == auth.uid ) "
}
Комментарии:
1. Я все еще жду
CLOSED
варианта, как только вы упомянете его назначение, я обновлю свой ответ.2. Я опубликовал все правило перехода, чтобы вы могли понять, для чего оно используется
$user_id
. А также я внес изменения в правила, если типPRIVATE
, никто не будет его читать, кроме пользователя-владельца.3. Я изменил, как вы предложили, и протестировал в play ground. Мой путь
users/{uid}
и аутентифицирован. Но в правиле чтения отказано.4. Я даже пытался
".read":"data.child('type').val()== 'PUBLIC'
, но оно тоже отказало. Почему мне отказывают?5. Можете ли вы загрузить снимок экрана с вашими данными, чтобы я мог воссоздать ошибку?