Skip to content

feat: honor destinationPredefinedAcl on object copy and compose - #2310

Open
gaul wants to merge 1 commit into
fsouza:mainfrom
gaul:object-predefined-acl
Open

feat: honor destinationPredefinedAcl on object copy and compose#2310
gaul wants to merge 1 commit into
fsouza:mainfrom
gaul:object-predefined-acl

Conversation

@gaul

@gaul gaul commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

objects.copy, objects.rewrite and objects.compose all accept a destinationPredefinedAcl, and the real API applies it to the object they produce. Neither handler read it: a rewrite gave the destination the source object's ACL, and a compose left whatever CreateObject assigns, so a client asking for a public destination got a private one and no error.

Take it from the query string in both, mapping it through the existing getObjectACL, which is what the upload paths already do for predefinedAcl. A rewrite with no destination ACL keeps inheriting the source's, and a compose without one keeps whatever it had, so the default in each is unchanged.

Composing needs the ACL at the point the destination is built, so it joins the attributes ComposeObject already carries. The gRPC compose passes nil: it forwards none of the destination attributes today, and wiring only the ACL would leave it the odd one out.

Objects uploaded through /upload already had this; copying and composing them did not.

objects.copy, objects.rewrite and objects.compose all accept a
destinationPredefinedAcl, and the real API applies it to the object they
produce.  Neither handler read it: a rewrite gave the destination the
source object's ACL, and a compose left whatever CreateObject assigns,
so a client asking for a public destination got a private one and no
error.

Take it from the query string in both, mapping it through the existing
getObjectACL, which is what the upload paths already do for
predefinedAcl.  A rewrite with no destination ACL keeps inheriting the
source's, and a compose without one keeps whatever it had, so the
default in each is unchanged.

Composing needs the ACL at the point the destination is built, so it
joins the attributes ComposeObject already carries.  The gRPC compose
passes nil: it forwards none of the destination attributes today, and
wiring only the ACL would leave it the odd one out.

Objects uploaded through /upload already had this; copying and composing
them did not.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant