Как скрыть поля документов в веб-CMS, но не в Android и iOS - PullRequest
0 голосов
/ 04 мая 2019

Не могли бы вы мне помочь, дать несколько советов и помочь мне лучше защитить мой проект?

Проект представляет собой викторину с вопросами и ответами.

  • У меня есть веб-CMS, управляемая администратором (пользовательская заявка), которая подключается к Firestore для данных CRUD.

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

  • Есть 2 приложения, iOS и Android, пользователи также могут загружать приложения и отвечать на вопросы.

В Firestore есть коллекция «вопросов» с ответами на документы, каждый ответ содержит поле is_correct_answer (логическое)

Как я могу заблокировать пользователей, чтобы они не могли читать поле is_correct_answer?

Если умный пользователь попытается ввести приведенный ниже код, он увидит, какой правильный ответ на вопрос.

firebase.firestore()
          .collection("questions")
          .doc("question_1")
          .collection("answers")
          .doc("answer_1")
          .get().then(function(snap){

console.log(snap.data().is_correct_answer );
        })

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

Спасибо.

Ответы [ 3 ]

1 голос
/ 05 мая 2019

Альтернативой является ограничение доступа к ответам для пользователей. Попросите пользователей отправить лист «ответов» после завершения теста / каждого вопроса, и облачная функция проверит отправленные ответы, получит документы с личными ответами и обновит отправленный лист ответов с оценкой.

1 голос
/ 04 мая 2019

Firestore SDK на стороне клиента всегда извлекает полные документы. Невозможно вернуть (или ограничить доступ) часть документа.

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

0 голосов
/ 08 мая 2019

Благодаря объяснениям, предоставленным Фрэнком ван Пуффеленом и Джейсоном Берриманом, я наконец нашел решение своей проблемы:

Я запускаю функцию HTTP, которая запрашивает SDK администратора, существует ли пользователь.Если это правда, я передаю JWT и войти в систему пользователя.Все запросы, сделанные этим пользователем, проверяются благодаря серверной части JWT.Это не позволяет пользователю напрямую взаимодействовать с Firebase на стороне клиента.Приложения зашифрованы, и соединение установлено по протоколу HTTPS.

Я не знаю, безопасно ли это и является "хорошей практикой", но оно работает для меня.

...