Правило Firestore для доступа на запись на основе значения bool свойства

#ios #firebase #google-cloud-firestore #firebase-security

#iOS #firebase #google-облако-firestore #firebase-безопасность

Вопрос:

введите описание изображения здесь

У меня есть структура, подобная приведенной выше. Чего я хочу добиться, так это того, что в chat_room пользователь может писать, только если в массиве users этот uid.isActive == true

 rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
     match /users/{userId} {
      allow update, delete: if request.auth != null amp;amp; request.auth.uid == userId;
      allow create, read: if request.auth != null;
    }
    match /chats/{chatId} {
      allow read, write: if request.auth.uid != null;
      match /chat_room/{roomId} {
        allow read, write: if request.auth.uid != null;
      }
    }
  }
}
  

Ответ №1:

Похоже, вы хотите:

 match /chat_room/{roomId} {
  allow read, write: if get(/databases/$(database)/documents/chats/$(chatId)).data.users[request.auth.uid].IsActive == true;
}
  

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