По какой-то причине существует не любит оценивать переменные, кроме базы данных в правилах Firestore.Глядя на документацию, я смог обнаружить, что функция существующие действительно принимает Path
, описанную здесь: https://firebase.google.com/docs/reference/rules/rules.Path
Используя эту информацию, я смог достичь чего-то похожего на то, что вы хотели выше, сначалапостроение пути в виде строки с использованием конкатенации, а затем передача его в функцию exists
.
Для вашего примера выше это будет выглядеть так:
match /events/{season}/events/{code} {
function isVV (database, season, code) {
return exists(path("/databases/" + database + "/documents/events/" + season + "/events/" + code + "/vv/" + request.auth.uid));
}
allow read: if isVV(database, season, code);
}
Примечание: вы должны передатьБаза данных как параметр функции, как я обнаружил, что при использовании конкатенации строк таким образом, она не заполняется автоматически, как при использовании чего-то вроде exists(/databases/$(database))