Невозможно сопоставить ref во вновь созданном документе для запроса uid - PullRequest
0 голосов
/ 16 апреля 2020

извините, если мой вопрос - duplicatd, но я не нашел других сообщений об этой проблеме!

Я хочу разрешить пользователю создавать новый /packages/ документ, только если вновь созданные данные содержат поле со ссылкой на их users/{uid} документ.

Я уже использую следующую функцию для сравнения ссылки при записи в документ (находится здесь: { ссылка }, что является отличным ответом кстати!):

    function refMatch(field) {
      return request.auth != null && request.auth.uid != null && field in resource.data
        && resource.data[field] == /databases/$(database)/documents/users/$(request.auth.uid)
    }

Я изменил его, чтобы получить доступ к данным из запроса (еще не представлен в документе):

    function createdRefMatch(field) {
      return request.auth != null && request.auth.uid != null && field in request.resource.data
        && request.resource.data[field].path == /users/$(request.auth.uid)
    }

Используется так:

    match /packages/{packageId} {
      allow create: if createdRefMatch('user');
    }

Проблема в том, что даже строка request.resource.data[field].path == /users/$(request.auth.uid) выглядит так, как будто она должна выполнять свою работу, сравнение всегда ложно. Когда я отлаживаю значения в firebase, оказывается, что левая сторона всегда является объектом ({"field":"..."}), а правая сторона является строкой. Похоже, это ничего не меняет, если я использую .path или нет, отладчик всегда показывает объект вместо значения.

Я также пытался сравнить два объекта (не уверен, возможно ли это в любом случае ) но тогда проблема в том, что одно из значений field начинается с sla sh, а другое - нет.

Я даже пытался изменить сравнение следующим образом:

/databases/$(database)/documents/$(request.resource.data[field].path) == /databases/$(database)/documents/users/$(request.auth.uid)

Но тогда часть $(request.resource.data[field].path) каким-то образом заменяет sla sh на URL-значение с процентами.

Пожалуйста, кто-то может указать, что я могу изменить, чтобы это работало? Похоже, что различные способы манипулирования этими данными изменяют сами данные. Это действительно ад:)

Спасибо за ваше время!

...