#firebase #firebase-storage #firebase-security
#firebase #firebase-хранилище #firebase-безопасность
Вопрос:
По какой-то причине я не могу заставить подстановочные знаки работать в пути с пользовательскими токенами. Пользователь назначает пользовательские токены следующим образом admin: true
и ySWLb8NSTj9sur6n2CbS: true
service firebase.storage {
match /b/{bucket}/o {
match /conferences/{confId}/sponsors/{sponsId=**} {
allow read: if request.auth.uid != null
allow write: if request.auth.token.confId == true
}
}
}
Я пытаюсь записать в /conferences/ySWLb8NSTj9sur6n2CbS/sponsors/whatever.jpeg от клиента и получил отказ в доступе.
Если я сейчас изменю их на приведенные ниже, это сработает без проблем.
service firebase.storage {
match /b/{bucket}/o {
match /conferences/{confId}/sponsors/{sponsId=**} {
allow read: if request.auth.uid != null
allow write: if request.auth.token.admin == true
}
}
}
Я даже протестировал это, изменив пользовательский токен на ySWLb8NSTj9sur6n2CbS: "ySWLb8NSTj9sur6n2CbS"
, а затем безуспешно попробовал нижеприведенное и получил отказ в доступе!
service firebase.storage {
match /b/{bucket}/o {
match /conferences/{confId}/sponsors/{sponsId=**} {
allow read: if request.auth.uid != null
allow write: if request.auth.token.confId == confId
}
}
}
У меня такое чувство, что подстановочный знак по какой-то причине не выбран, или я что-то здесь упускаю?
В документации я нашел это:https://firebase.google.com/docs/storage/security/user-security?authuser=0
Ответ №1:
Итак, я выяснил, что по какой-то странной причине это работает наоборот. Я назначил пользователю пользовательское утверждение в виде массива. В этом массиве у вас есть confId. Итак, я проверяю, есть ли соответствующий confId в этом массиве.
service firebase.storage {
match /b/{bucket}/o {
match /conferences {
match /{confId}/sponsors/{sponsorId} {
allow read: if confId in request.auth.token.userEvents
allow write: if confId in request.auth.token.adminEvents
}
}
}
}