设置对象访问权限
与桶访问权限类似,对象访问权限同样具有 Canned Accesss Control List 与 Access Control List 两种。需要注意的是,对象的访问优先级要高于桶访问权限。比如桶访问权限是 private,但是对象访问权限是 public-read ,则所有用户都可以访问该对象。默认情况下,只有对象的拥有者才能访问该对象,即对象的访问权限默认是 private。
- Canned Accesss Control List
Canned Accesss Control List 实际上是包含了一组预定义的被授权人和权限。Canned Accesss Control List 格式的对象访问权限包含了以下几种:
权限 | Ruby SDK对应值 |
---|---|
私有读写 | private |
公共读私有写 | public-read |
公共读写 | public-read-write |
注册用户可读 | authenticated-read |
使用 Canned Accesss Control List 设置对象的访问权限示例代码如下:
def put_object_acl1(client, bucket_name, object_key, canned_acl)
client.put_object_acl(
bucket: bucket_name,
key: object_key,
acl: canned_acl
)
puts 'Object ACL set.'
rescue StandardError => e
puts "Error setting object ACL: #{e.message}"
end
- Access Control List
使用 Access Control List 设置对象访问权限时,可以设置特定用户对象的访问权限。对象的 Access Control List 权限如下表:
权限 | Ruby SDK对应的参数 |
---|---|
可读,可列出桶下的对象。 | grant_read |
可写,可创建/删除/覆盖写该桶下的对象。 | grant_write |
可读取桶的acl规则。 | grant_read_acp |
可修改桶的acl规则。 | grant_write_acp |
完全权限。拥有以上所有权限。 | grant_full_control |
使用 Accesss Control List 设置对象的权限示例代码如下:
def put_object_acl2(client, bucket_name, object_key)
client.put_object_acl(
bucket: bucket_name,
key: object_key,
grant_full_control: 'id=test-user-id' # 开启id为test-user-id的用户的完全控制权限
)
puts 'Object ACL set.'
rescue StandardError => e
puts "Error setting object ACL: #{e.message}"
end