Правила безопасности облачного хранилища Firebase - пользовательские заявки слишком длинные, поэтому сохраняют их как строки, но не могут извлечь из них по правилам безопасности - PullRequest
0 голосов
/ 02 марта 2020

Поскольку некоторые члены нашей организации имеют свои пользовательские заявки, превышающие 1000 символов, мы начали сохранять заявки в виде строк (надеюсь, это правильный подход).

Например, если группы пользователей были бы сохранены, далеко до претензий, подобных этому: {groups: ['G1', 'G2', 'G3']} теперь мы сохраняем вот так {groups: '|1|2|3'}. А затем по правилам безопасности я пытаюсь преобразовать строку storage.tmpl.rules в массив.

function hasGroup(group) {
    return isSignedIn() && getGroups().hasAny([group]);
    // Also tried: group in getGroups()
}

function getGroups() {
    // '|1|2|3' => ['', '1', '2', '3'] => '|G|G1|G2|G3' => ['', 'G1', 'G2', 'G3']
    return request.auth.token.groups.split('|').join('|G').split('|');
}

match /path/path/{groupId}/path/{allPaths=**} {
    allow write: hasGroup(groupId);
}

Мне все время отказывают! Что мне не хватает? Кроме того, в Интернете нет ресурсов, посвященных методам минимизации размера претензий. И также вы не можете отладить это в симуляторе. Спасибо за чтение, любая помощь поможет.

1 Ответ

1 голос
/ 02 марта 2020

Если вам необходимо превысить лимиты размеров пользовательских утверждений, первое, что вам следует учитывать, - это не использовать настраиваемые утверждения. Вместо этого вы можете хранить данные для каждого пользователя в документе, идентифицированном UID пользователя, и get () этого документа для проверки его полей в правилах безопасности. Яркие примеры можно найти в документации . Например:

// Allow the user to delete cities if their user document has the
// 'admin' field set to 'true'
allow delete: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true

Прежде чем вы возразите против требования о стоимости чтения документа, я укажу, что пользовательские утверждения по своей природе ограничены и вообще не могут масштабироваться. , Это одна из основных причин того, что правила безопасности позволяют читать документы с гораздо большей емкостью. Когда приложения должны масштабироваться за пределы простых вариантов использования, затраты неизбежны.

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

...