Ролевые правила пожарного магазина - PullRequest
0 голосов
/ 09 мая 2019

Нам нужно проверить роль пользователя в правилах Firebase. Пользователь может иметь одну из следующих ролей: ПОДДЕРЖКА, АДМИН, МОДЕРАТОР.

Объект User содержит коллекцию ролей, поэтому мы можем поместить некоторые метаданные в соответствующую роль: Пользовательский объект

Я пытался использовать эту коллекцию в правилах своего пожарного магазина, но мне это не удалось:

    function getUserRoles(userId) {
        return get(/databases/$(database)/documents/users/$(userId)/roles);
    }

    function hasRole(userId, role) {
        return getUserRoles(userId) in role;
    }

К сожалению, я не смог найти что-то в документации, как я могу проверить, содержит ли список ролей реквизированный role в качестве идентификатора документа.

1 Ответ

0 голосов
/ 09 мая 2019

get() может получить только один документ, а не всю коллекцию. Итак, то, что вы пытаетесь сейчас, просто невозможно. Также имейте в виду, что вы можете только get() до 10 документов на запрос.

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

function hasRole(userId, role) {
    return exists(/databases/$(database)/documents/users/$(userId)/roles/$(role))
}

Предполагается, что role - это строковое имя роли, например, «ПОДДЕРЖКА». Вам придется вызывать эту функцию для каждой отдельной роли, которую вы хотите проверить.

Если вам также необходимо проверить содержимое документа, вместо этого вам нужно будет get() просмотреть его и просмотреть поля документа.

...