2014-12-17 1 views
1

Я пытаюсь реализовать функцию в своем приложении, чтобы позволить аутентифицированному пользователю искать другого пользователя, введя адрес электронной почты пользователя. Я пытаюсь найти лучший способ реализовать правила безопасности в firebase, чтобы разрешить этот тип поиска, но НЕ разрешить зарегистрированному пользователю просто перечислять всех пользователей через/пользователей.Как разрешить поиск пользователей, но не разрешать перечисление пользователей в Firebase?

В настоящее время у меня есть это правило безопасности:

"users" : { 
    ".indexOn" : "email", 
    ".read": "auth != null", 
    "$uid": { 
     ".write": "auth.uid === $uid" 
    } 

Это явно позволяет любой авторизованный пользователь читать коллекцию целиком пользователи. Удаление этой строки:

".read": "auth != null" 

исправляет это, но теперь я больше не могу искать пользователя по электронной почте. Каков рекомендуемый подход?

ответ

1

Firebase имеет два права, которые Вы можете предоставить:

  • чтения
  • написать

Там нет отдельного права, чтобы позволить поиск, так что это означает, что любой, кто может найти узел также может прочитайте этот узел.

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

users 
    twitter:4368352 
     id:4368352 
     name: "lestyn Lewis" 
     email: "[email protected]" 
    twitter:209103 
     id:209103 
     name: "Frank van Puffelen" 
     email: "[email protected]" 

Подсказка: это было бы хорошо, если бы вы могли бы обновить свой вопрос и указать фактическую структуру вашего узла пользователей.

С вышеуказанной структурой вы должны были бы предоставить пользователям .read права на все узлы под Users. Это позволит им читать не только адреса электронной почты и идентификаторы, но и любую другую информацию, которую вы можете сохранить на них.

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

users 
    twitter:4368352 
     id:4368352 
     name: "lestyn Lewis" 
     email: "[email protected]" 
    twitter:209103 
     id:209103 
     name: "Frank van Puffelen" 
     email: "[email protected]" 
email_to_uid: 
    "[email protected]": "twitter:4368352" 
    "[email protected]": "twitter:209103"  

Вы можете дать все права пользователей для поиска, но только дать доступ к полные пользовательские настройки к более ограниченному кругу пользователей:

"users" : { 
    ".indexOn" : "email", 
    "$uid": { 
     ".read": "auth === $uid", 
     ".write": "auth.uid === $uid" 
    } 
}, 
"email_to_uid" { 
    ".read": "auth != null" 
} 

Обратите внимание, что вы в основном здании свой собственный индекс здесь, похоже на то, что ".indexOn": "email" делает, так что вы можете контролировать то, что информация поступает в него и кто может получить доступ к Это.

+0

Спасибо, я бы принял это раньше, но не получил письмо или его съел спам-папкой. Это тот подход, о котором я думал, по-прежнему не нравится, что он позволяет зарегистрированному пользователю перечислить все адреса моих пользователей, если они знают, что они делают, но это улучшение. Спасибо. –

+0

Учитывая, что «возможность поиска» требует, чтобы вы могли прочитать эту информацию, вы не можете сделать ничего, кроме этого: создание промежуточного сервера/службы, выполняющей поиск. –

+0

Итак, если адрес электронной почты пользователя изменяется, я полагаю, что необходимо выполнить некоторую логику для обновления ключа в индексе с новым адресом электронной почты? – Genu

Смежные вопросы