Firestore имеет тип DocumentReference , который является «указателем» на другой документ пожарного депо.Используя клиент firebase JavaScript, вы можете получить доступ к свойствам (например, «id документа») непосредственно по ссылке.
Например, если существует документ со свойством docRef
, который является firetore Store DocumentReference:
const retrievedDoc = await getFirestoreDocument();
console.log(retrievedDoc.docRef.id); // "jRmSeMYDMKiOPGsmkdaZ"
Я пытаюсь добиться того же в рамках правил пожарного депо.Существует пользовательская функция с именем isOwner
.Он использует правила пожарного депо get
для пути к документу, а затем пытается получить доступ к docRef.id
, как если бы это был клиент JavaScript выше.
get(/databases/$(database)/documents/path/to/$(id)).data.docRef.id
Значениеидентификатор документа сравнивается с текущим пользователем.Но когда я проверяю это с помощью симулятора и в реальном коде, это терпит неудачу.Я чувствую, что это должно работать, но это не так.
То, что делает , заключается в сохранении и использовании значения id непосредственно в виде строки (например, get(/path/id).docId
) вместо DocumentReference.
Должен ли я бытьУ вас есть доступ к id
значению DocumentReference в правилах пожарного депо? Я что-то не так делаю?
Я хочу не делать второй документ get
в рамках правила, как описано в этом ответе SO .Это второе «чтение» для каждого триггера этого правила.И я не думаю, что идентификатор документа (который мне нужен) будет доступен при вызове get
в любом случае.