Правила Firebase - ограничение доступа администратора

1

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

Следующий код показывает, что один из моих тестовых пользователей 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
    ...

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

Теги:
firebase
firebase-security-rules
firebase-authentication
firebase-realtime-database

1 ответ

0

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

firebase.auth().currentUser.getIdTokenResult(true)...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню