我正在使用aws-sdk for Ruby来管理 S3 上的对象。我可以通过设置授予公共读取权限
object.acl = :public_read
有没有办法在这样做之前确定是否已经授予对象公共读取权限?
我正在使用aws-sdk for Ruby来管理 S3 上的对象。我可以通过设置授予公共读取权限
object.acl = :public_read
有没有办法在这样做之前确定是否已经授予对象公共读取权限?
Ruby aws-sdk 的文档很差,我也无法找到它。下面是我创建的一个函数,用于检查文件是否具有读取权限。根据您的需要修改它:
def check_if_public_read(object)
object.acl.grants.each do |grant|
begin
if(grant.grantee.uri == "http://acs.amazonaws.com/groups/global/AllUsers")
return true if ([:read, :full_control].include?(grant.permission.name))
end
rescue
end
end
return false
end
其中 object 是任何 S3 对象:
AWS.config(
:access_key_id => "access key",
:secret_access_key => "secret key"
)
s3 = AWS::S3.new
file = s3.buckets["my_bucket"].objects["path/to/file.png"]
check_if_public_read(file) => true
请注意,我在查看对象和 aws-sdk 源代码时发现了这一点,并且 uri 参数可能会随着时间而改变。这现在有效,适用于 aws-sdk gem 版本 1.3.5。