2016-10-24 4 views
1

Для моего приложения iOS я разрешаю пользователям делать запросы друзей, которые в принципе похожи на запрос друга Facebook. Поэтому у кого-то может быть x друзей.Правила безопасности Firebase - предотвратить повторный запрос друга

Я бы хотел, чтобы пользователь не отправлял более одного запроса другу одному пользователю и надеялся сделать это, добавив правило валидации в правила базы данных - (я еще не изучил возможность использования другого список еще)

Текущее правило проверки, которое у меня есть, - это запретить пользователю отправлять запрос другу.

Ниже приведена структура базы данных, где мне нужно проверить, что значения для 'fromUid' и 'toUid' не существуют вместе как пара.

"requests" : { 

     "-KUr12h72I4T2WiI4JG0" : { // autoChildId 

      "fromUid" : "etOdpR0wpKYNFrIP7BNirhCYuYo1", 
      "toUid" : "UeATHfKdjVYunsOt8L0TGxfCBTQ2" 
    } 

текущие правила я имею мешает пользователю отправлять запрос друга к себе

"requests": { 
     ".read": "auth != null", 
     "$autoID": { 
      ".validate": "newData.child('fromUid').val() != newData.child('toUid').val()" 
     } 
    }, 

Так как я могу проверить, что значение «fromUid» и значение «toUid» не существуют как пара вместе? т. е. этот запрос друга еще не сделан.

Это была моя неудачная попытка по правилам безопасности:

 ".validate": "&& newData.child('fromUid').val() + newData.child('toUid').val() !== data.child('fromUid').val() + data.child('toUid').val() && newData.child('toUid').val() + newData.child('fromUid').val() !== data.child('toUid').val() + data.child('fromUid').val()" 

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или ясность Благодаря

ответ

3

Хорошо (и правильно) структура базы данных более половины проект. Если вы плохо структурируете структуру базы данных, у вас будут большие проблемы, особенно когда вы работаете с базой данных NOSQL. Если вы заранее потратите время на разработку базы данных, вы будете счастливы позже.

Вы должны проектировать проект и заранее подумать о том, какие операции вам нужны. Как вы хотите показать данные, у кого есть какие роли, и создать свою базу данных firebase в соответствии с ней.

Моя рекомендация состоит в том, чтобы прочитать следующую страницу о структурировании данных из документации по firebase.

https://firebase.google.com/docs/database/web/structure-data

О вашей проблеме

Я предлагаю модифицирующих структуру базы данных и группы toUid ей по fromUid.

{ 
    "requests": { 
     // user Ids who sent request 
     "userId1": { 
      // receiver ids 
      "userId2": true, 
      "userId3": true, 
      "userId4": true 
     }, 
     "userId2": { 
      "userId3": true, 
      "userId4": true 
     } 
    } 
} 

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

Вот правила для этого.

"requests": { 
    ".write": "auth != null", 
    "$senderId": { 
    "$receiverId": { 
     ".validate": "$senderId !== $receiverId" 
    } 
    } 
} 

С этой структурой вы также можете легко выполнять другие операции. Например, чтобы получить все запросы от fromUid. Чтобы проверить, отправил ли userId1 запрос userId2 и т. Д.

+0

Hi Zura благодарит за отличный ответ. – Edward

+0

Не знаю, почему я структурировал свои данные так, как я.В этом случае нет необходимости добавлять ключ autoByChildId(), а затем иметь узел toUid и fromUid, так как uid пользователя уникален и является одним из событий. Эта структура делает вещи намного проще :), Cheers – Edward

+0

Отлично! ... Было бы хорошо, если бы вы приняли ответ и нажмите стрелку вверх. Это поможет другим узнать, что этот ответ полезен –

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