Estou tentando criar uma regra do Firebase Storage que só permite acesso a arquivos em /approved/ se o usuário tiver um campo permission: true no Realtime Database, localizado neste caminho:
/Users/{uid}/permission
Aqui está a regra que estou tentando:
service firebase.storage {
match /b/{bucket}/o {
match /approved/{fileId} {
allow read, write: if isApprovedUser();
}
}
}
function isApprovedUser() {
return request.auth != null &&
get(/databases/(default)/data/Users/$(request.auth.uid)/permission).val() == true;
}
No simulador do Firebase Console, eu o testo com um ID de usuário válido (dzS1gm71rhgTM4NYdZQ81MuceTp2), e esse caminho definitivamente existe no Realtime Database, este é o RTDB
A função isApprovedUser não funciona, e tentei várias coisas, mas no final, nenhuma delas funcionou, e não consigo descobrir qual é o problema. Até tentei remover o .val(), mas não funcionou.
O que eu tentei:
• Double-checked that the path is correct
• Ensured the user is authenticated
• Checked the Realtime Database rules (they currently allow read access for authenticated users)
• Tried changing the path casing, checked for typos
Embora as regras de segurança do Firebase Storage possam ler dados do Cloud Firestore , elas não podem ler dados do Realtime Database. Portanto, o que você está tentando fazer não é um recurso compatível.
Veja também minha resposta aqui: Criando regras de segurança do Firebase Storage com base nas condições do banco de dados Firebase
Pode ser uma boa solicitação de recurso para adicionar ao firebase.uservoice.com, embora eu admita que estou cético se isso algum dia será priorizado.