Правила безопасности на основе запросов Firebase не работают - PullRequest
0 голосов
/ 05 мая 2020

У меня следующая структура данных:

Orders
|_ -M6LSRsTuVY
    |___ Cust_ID: "6WERv67YUVT"
    |___ Items: "A, B, C, D"
    |___ Status: "Query"
    |___ Location: "xyz"

Предполагается, что это запрос заказа, размещенного пользователем. Cust_ID содержит идентификатор пользователя, разместившего заказ. Список пользователей - это другой список. Заказ будет виден пользователю, чей идентификатор совпадает с Cust_ID, и пользователям, которые относятся к типу поставщик. Я не предоставляю здесь эту структуру данных. При необходимости могу предоставить и это.

Теперь я прикрепил прослушиватели событий значения для обоих типов пользователей следующим образом: на этапе «Запрос», а ниже - для пользователя, разместившего заказ.

mRef.orderByChild("Cust_ID").equalTo(userid).addValueEventListener

Оба этих поиска работали отлично, когда для правил безопасности базы данных установлено значение «true». Затем я изменил правила безопасности, так что заказы могут быть прочитаны только Клиентом, чей идентификатор совпадает с Cust_ID, или пользователем, имеющим тип поставщика. Правило безопасности базы данных для «чтения» выглядит следующим образом:

 ".read": "(auth != null && query.orderByChild === 'Cust_ID' && query.equalTo === auth.uid)
        ||(auth != null && query.orderByChild === 'Status' && query.equalTo === 'Query')",

После размещения этого правила безопасности вторая операция поиска, при которой идентификатор клиента совпадает с идентификатором пользователя, работает отлично. Но первая операция поиска, когда Поставщик ищет «Запрос», не работает, так как есть «В разрешении отказано».

Может ли кто-нибудь помочь в том, что здесь происходит.

...