本文介绍如何在受版本控制的存储空间(Bucket)中管理文件(Object)的访问权限(ACL)。

设置文件访问权限

PutObjectACL默认设置Object当前版本的ACL权限。如果Object的当前版本是删除标记(Delete Marker),OSS将返回404 Not Found。请求参数中指定versionId可以设置指定Object版本的ACL权限。

以下代码用于设置文件访问权限:
# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')

# 给指定版本的object修改权限,此处以修改为公共读权限为例。
params = dict()
params['versionId'] = '<yourObjectVersionId>'
result = bucket.put_object_acl(<'yourObjectName'>, oss2.OBJECT_ACL_PUBLIC_READ, params = params)
# 查看本次修改权限操作的object的版本id。
print('set acl object versionid:', result.versionid)

设置文件访问权限的详细信息请参见PutObjectACL

获取文件访问权限

GetObjectACL默认获取Object当前版本的ACL权限。如果Object的当前版本是删除标记(Delete Marker),OSS将返回404 Not Found。请求参数中指定versionId可以获取指定Object版本的ACL权限。

以下代码用于获取文件访问权限:
# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')

# 获取指定版本的object权限。
params = dict()
params['versionId'] = '<yourObjectVersionId>'
result = bucket.get_object_acl(<'yourObjectName'>, params = params)
# 查看获取到的指定版本object的权限。
print('get object acl :', result.acl)
# 查看本次执行获取权限操作的object的版本id。
print('object version id:', result.versionid)

获取文件访问权限的详细信息请参考GetObjectACL