Правила безопасности Firebase Cloud Firestore с картой - PullRequest
1 голос
/ 06 августа 2020

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

Заранее спасибо за ваши ответы

введите описание изображения здесь Вот правила, которые я пробовал

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    //TEST ONLY
    //match /{document=**} {
    //  allow read, write;
    //}
    
    // match logged in user doc in users collection
    match /users/users/{userId} {
      allow create : if request.auth.uid != null;
      allow read : if request.auth.uid == userId;
      
      match /{anything=**} {
        allow read, write : if request.auth.uid == userId;
      }
    }
  }
}

А вот пример того, как я использую Firestore:

// Collection reference
final CollectionReference _usersCollection = Firestore.instance.collection('users');

Stream<List<double>> get existingRecord {
  return _usersCollection.document('users').snapshots()
    .map(_existingRecordListFormSnapshot);
}

List<double> _existingRecordListFormSnapshot(DocumentSnapshot snapshot) {
  ...
  double tips = snapshot.data['$uid']['data']['$year']['$month']['$week']['$day']['Tips'];
}

Моя проблема в том, что я хочу, чтобы доступ имел только пользователь к их данным. Для этого я сделал документ «пользователей», который содержит карту «пользователей», которая содержит все пользовательские данные, названные с их уникальным uid. И я не могу настроить правила безопасности, чтобы только пользователь имел доступ к его данным.

Схема выглядит так: users / users / [{userID}, {userID}, ...]

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

1 Ответ

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

Не помещайте всех пользователей в один и тот же документ, вместо этого у вас должен быть один документ для каждого пользователя (с именем документа, равным uid Firestore для более простых правил).

Тогда ваше правило может быть просто:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {   
    // match logged in user doc in users collection
    match /users/{userId} {
      allow create : if request.auth.uid != null;
      allow read : if request.auth.uid == userId;
      
      match /{anything=**} {
        allow read, write : if request.auth.uid == userId;
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...