Как ограничить доступ к подмножеству данных в базе данных Firebase в реальном времени? - PullRequest
0 голосов
/ 05 апреля 2019

Я разрабатываю приложение для Android, где мой пользователь проходит аутентификацию через FirebaseAuth.

Мой пользователь должен установить в общих настройках идентификатор блока контроллера.После этого приложение может (и авторизовано) читать / записывать данные на этом конкретном контроллере в базу данных в реальном времени.

В настоящее время я не знаю, как определять правила безопасности на основе идентификатора пользователя ИИдентификатор блока контроллера.

Моя база данных выглядит так:

controllers
    CID1
        data
    CID2
        data

На данный момент пользователи не реализованы в базе данных.Моя идея состояла бы в том, чтобы назначить контроллер одному или нескольким идентификаторам пользователей (сгенерированным Firebase Auth), примерно так:

controllers
    CID1
        data
        members
            UID1
            UID2
    CID2
        data
        members
            UID3
            UID4

В этом примере пользователи с UID3 & 4 должны иметь доступ к контроллеру CID2только.Поэтому мне нужно правило безопасности, разрешающее только чтение / запись в соответствующий CID.Я представляю что-то вроде этого:

"rules":{
    "controllers":{
      "$controller":{
        ".write": "$auth.uid === $controller.child('members').child($auth.uid)..."
      }
    },

Но если я это сделаю, мой пользователь не сможет объявить себе идентификатор контроллера, к которому он должен иметь доступ.

Нужно ли мне сначала создавать пользователейузел, содержащий объявления CID моих пользователей?

controllers
    CID1
        data
        members
            UID1
            UID2
    CID2
        data
        members
            UID3
            UID4

users
    UID1
       CID1
    UID3
       CID2
...

ОБНОВЛЕНИЕ: Давайте попробуем придать больше значения вышеприведенному вопросу через историю пользователя.Допустим, я продавец контроллера;Я отправляю контроллер с его уникальным серийным номером (CID).Как поставщик, я добавляю контроллер в базу данных (контроллеры> CIDx и структура данных по умолчанию).Пользователь, получив контроллер, установит приложение и авторизуется через свою учетную запись Google.Затем пользователь введет уникальный серийный номер (CID) для подключения к контроллеру.Различные пользователи (прошедшие проверку подлинности, это обязательное условие) могут подключаться к одному контроллеру.Пользователь должен иметь возможность считывать информацию с контроллера (читать в БД) и отправлять заказы контроллеру (писать в БД).

Я хочу, чтобы злонамеренный пользователь не проанализировал полный БД, а затемполучить все уникальные идентификаторы контроллера и затем взять контроль вместо моих пользователей.

...