Правила безопасности Firestore: имеют ли значение неопределенные свойства объекта? - PullRequest
0 голосов
/ 01 октября 2019

Мне было интересно, что такое соглашение в отношении неопределенных свойств с правилами безопасности firestore.

Например, в следующем правиле, которое проверяет пользовательское утверждение:

allow read: if request.auth.token.claims.admin;

Существует множество точек для ошибки неопределенного свойства, наиболее вероятным из которых является то, что если пользователь не аутентифицирован, то request.auth будет неопределенным, поэтому request.auth.token.claims.admin будет пытаться получить доступ к свойству неопределенного значения.

Я заметил, что в документации request.auth.uid - это общая проверка, и они не проверяют, определен ли сначала request.auth. Однако в своем исследовании я заметил, что некоторые люди выполняют проверку похожих запросов, например в этом ответе о переполнении стека .

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

enter image description here

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

allow read: if request.auth.token.claims.admin;

allow read: if request.auth.token.claims.admin == true;

1 Ответ

1 голос
/ 02 октября 2019

Во-первых: все ошибки в оценке правил приводят к ошибке. Ошибка, без каких-либо условий, приводит к отказу в доступе. Таким образом, если вы пытаетесь получить доступ к свойству нулевого или неопределенного объекта, это ошибка (так как это свойство не существует) и приводит к немедленному отказу в доступе.

Если вы хотите явно проверитьдля нуля в ваших правилах, это нормально. Это, вероятно, помогает удобочитаемости этих правил. Но вы не обязаны это делать из-за немедленного отказа в доступе. Это полностью зависит от вас.

...