This question is regarding Firebase Cloud Storage security rules, documented at https://firebase.google.com/docs/storage/security and related pages.
The statement to match a generic bucket is match /b/{bucket}/o
: the documents explain that {bucket}
is a wildcard (akin to *
) to match any bucket name, but to me it seems that the meaning of the leading /b/
and trailing /o
are left unexplained, can anyone help me understand the meaning of those path segments?
CodePudding user response:
The /b
signals the next component of the URI is the relevant bucket: /b/{bucket}
.
The /o
signals the next component of the URI is the name (or path) of the relevant object in that bucket: /o/path/to/object.png
Note: Storage Buckets don't have a concept of folders, an object's name can include slashes, but to the server, the slash is just part of the file name and has no special meaning.
So a rule that names /b/{bucket}/o/publicUserFiles/{request.auth.uid}/profile.png
would define a rule for the profile.png
file, stored in a "folder" named with the relevant user's UID, under another "folder" called publicUserFiles
, in the relevant bucket.
Instead of putting /b/{bucket}/o
at the front of every rule, you can lift it out to the top of the file.
i.e.
service firebase.storage {
match /b/{bucket}/o/images/{imageId} {
allow write: // some rule here;
}
match /b/{bucket}/o/profileImages/{imageId} {
allow write: // some rule here;
}
}
becomes
service firebase.storage {
match /b/{bucket}/o {
match /images/{imageId} {
allow write: // some rule here;
}
match /profileImages/{imageId} {
allow write: // some rule here;
}
}
}