#firebase #google-cloud-firestore #firebase-security
#firebase #google-облако-firestore #firebase-безопасность
Вопрос:
В сложном продукте часто приходится использовать одни и те же условия правила, например, если пользователь является администратором:
match /games/{game} {
allow read: if true;
allow write: if request.auth != null amp;amp; get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true
}
match /locations/{location} {
allow read: if true;
allow write: if request.auth != null amp;amp; get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true
}
Есть ли способ сохранить условие внутри переменной, чтобы повторно использовать его (вместо того, чтобы записывать его каждый раз)? Например:
const isAdmin = request.auth != null amp;amp; get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
match /games/{game} {
allow read: if true;
allow write: if isAdmin
}
match /locations/{location} {
allow read: if true;
allow write: if isAdmin
}
Я понятия не имею, какой язык стоит за правилами firestore и какие ресурсы я могу использовать.
Комментарии:
1. Если вы хотите узнать больше о синтаксисе правил безопасности, вам следует начать с документации. firebase.google.com/docs/firestore/security/get-started
Ответ №1:
Да, вы можете использовать пользовательские функции, как описано в документе.
В вашем случае это было бы что-то вроде следующих строк (непроверено):
function isAdmin() {
return request.auth != null amp;amp; get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
}
match /games/{game} {
allow read: if true;
allow write: if isAdmin();
}
match /locations/{location} {
allow read: if true;
allow write: if isAdmin();
}
Обратите внимание, что позиция функции в «иерархии» правил безопасности важна. Взгляните на это официальное видео для получения более подробной информации.