Правила Firebase Firestore для защиты учетных записей - PullRequest
0 голосов
/ 30 апреля 2018

Я работаю над своим первым большим огненным штормом. Это по сути мультитенантное приложение, в котором мы имеем структуру коллекции, такую ​​как:

  • счета /
  • Счета / {ACCOUNTID} / otherCollections

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

{
 "name": "ACME Inc",
 "primaryUserID": "2wUMSpffuQgcFDWWI9uHm9RY642",
 "users": {
 "2wUMSpffuQgcFDWWI9uHm9RY642": {
    "admin": true,
    "user": true
  }
 }
}

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
     allow read, write: if request.auth.uid != null;
    }    
    match /accounts/{account}{
      function signedIn() {
        return request.auth.uid != null;
      }
      function SignedInAndBelongsToAccount() {
        return signedIn() && getUser() != null;
      }
      function getRole(roleName){
        return getUser()[roleName] == true;
      }
      function getUser() {
        return get(/databases/$(database)/documents/accounts/$(account.uid)).data.users[request.auth.uid];
      }
     allow read: if getRole('user')
     allow write: if getRole('admin');
  }
 }
}

Но в моем списке отображаются все учетные записи, и я еще не разобрался с подколлекциями. Что мне не хватает? Разве это не фильтрует строки, вместо этого мне нужно будет отфильтровать его по запросу приложения? Или я должен структурировать это совершенно иначе?

1 Ответ

0 голосов
/ 30 апреля 2018

Ваше первое правило совпадает с коллекцией, а не с документом, об этом особо рекомендуется в документации :

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

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

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