Безопасная обработка общей информации нескольких пользователей в Firebase Firestore, красные стрелки в разделе coupleId.contains (request.auth.uid) - PullRequest
0 голосов
/ 06 августа 2020

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

Пример:

user1: 'Adam'
user2: 'Eve'
commonInfo:
    meetingDate: new Date(-600000,1,1)
    marriageDate: new Date(-300000,1,1)
    children:['users/Cain','users/Abel','users/Seth']

(я предполагаю, что Adam & Eve Сейчас купили смартфон, и кто знает, кто может использовать приложение ...)

Проблема в том, что мне нужно защитить Firebase простым и надежным способом.

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

1 / Дубликат информации

Моя первая идея заключалась в том, чтобы использовать облачную функцию для синхронизации c данные между двумя профилями пользователей. Облачная функция будет работать только в том случае, если оба партнера имеют «with:», нацеленные друг на друга.

user1: 'Adam'
commonInfo:
    with: 'users/Eve' 
    meetingDate: new Date(-600000,1,1)
    marriageDate: new Date(-300000,1,1)
    children:['users/Cain','users/Abel','users/Seth']


user2: 'Eve'
commonInfo:
    with: 'users/Adam'
    meetingDate: new Date(-600000,1,1)
    marriageDate: new Date(-300000,1,1)
    children:['users/Cain','users/Abel','users/Seth']

Тогда правило Firestore очень простое:

match /users/{userId} {
      allow read, update, delete: if request.auth != null && request.auth.uid == userId;
      allow create: if request.auth != null;
    }

Но я не очень обнаружено дублирование данных ...

2 / Общий документ с именем afted users 'ID

Было бы более экономично c иметь общий документ

couple:EveAdam
    meetingDate: new Date(-600000,1,1)
    marriageDate: new Date(-300000,1,1)
    children:['users/Cain','users/Abel','users/Seth']

Я написал это, но у меня есть 2 красные стрелки в разделе coupleId и они содержат:

NB: содержит используется согласно: https://github.com/google/cel-spec/blob/master/doc/langdef.md#list -of-standard-definitions

match /couples/{CoupleId} {
      allow read, update, delete: if request.auth != null && coupleId.contains(request.auth.uid);
      allow create: if request.auth != null;
    }

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

1 Ответ

1 голос
/ 10 августа 2020

Как упоминалось мной и @DougStevenson в комментариях, лучшим подходом было бы дублировать данные более чем в одном документе по следующим причинам:

  • Дублирование данных является обычным и время от времени рекомендуемая практика для баз данных No SQL.

  • Второй подход был бы невозможен с текущим logi c для contains в правилах firebase и тем фактом, что вы сохраняете оба объединенных uid, которые сами по себе являются формой дублирования данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...