Правила Firebase - ограничение доступа администратора - PullRequest
0 голосов
/ 12 июня 2018

У меня есть узел adminContent в моей базе данных Firebase, который должен быть доступен только для чтения / записи, если для пользователя установлено значение admin в качестве пользовательского утверждения.

Следующий код показывает, что один из моих тестовых пользователей HAS admin установил значение true в качестве заявки, а один тестовый пользователь НЕ БЫЛ (поэтому проблема, похоже, не в корректной настройке заявки):

/* Check if admin */
firebase.auth().currentUser.getIdTokenResult().then(function(idTokenResult) {
   if (idTokenResult.claims.admin) {
    // THIS PART IS EXECUTED

   }
});

Это мои правила:

{
  "rules": {
    "metadata": {
      "$user_id": {
        // Read access only granted to the authenticated user.
        ".read": "$user_id === auth.uid",
        // Write access only via Admin SDK.
        ".write": false
      }
    },
    "adminContent": {
      ".read": "auth.token.admin === true",
      ".write": "auth.token.admin === true",
    }
  }
}

Оба тестовых пользователя (один с заявкой администратора и один без) могут читать и писать в adminContent.И когда я тестирую симулятор по правилам на консоли Firebase с UID обоих пользователей, никто не получает разрешения.

Структура данных выглядит следующим образом:

adminContent
    adminEmails
    announcements
metadata
    ...
users
    ...

Что-то не так с моимправила?Почему симулятор и реальный сценарий отличаются?

1 Ответ

0 голосов
/ 13 июня 2018

Возможно, токен устарел, т.е.пользовательская заявка была установлена ​​после выдачи идентификационного токенаВремя жизни токена составляет 1 час.Таким образом, до следующего обновления токен не получит последние утверждения.Вы можете принудительно обновить его после установки пользовательской заявки, позвонив по номеру:

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