文档首页 > > SDK参考> Python> 管理对象> 管理对象访问权限

管理对象访问权限

分享
更新时间: 2019/11/21 GMT+08:00

对象访问权限与桶访问权限类似,也可支持预定义访问策略(参见桶访问权限)或直接设置。

对象访问权限(ACL)可以通过三种方式设置:

  1. 上传对象时指定预定义访问策略。
  2. 调用ObsClient.setObjectAcl指定预定义访问策略。
  3. 调用ObsClient.setObjectAcl直接设置。

上传对象时指定预定义访问策略

以下代码展示如何在上传对象时指定预定义访问策略:

# 引入模块
from obs import ObsClient
 
# 创建ObsClient实例
obsClient = ObsClient(
    access_key_id='*** Provide your Access Key ***',    
    secret_access_key='*** Provide your Secret Key ***',    
    server='https://your-endpoint'
)

from obs import PutObjectHeader
from obs import HeadPermission
headers = PutObjectHeader()
# 设置对象访问权限为公共读
headers.acl = HeadPermission.PUBLIC_READ

resp = obsClient.putFile('bucketname', 'objectname', 'localfile', headers=headers)
if resp.status < 300:
    print('requestId:', resp.requestId)
else:
    print('errorCode:', resp.errorCode)
    print('errorMessage:', resp.errorMessage)

为对象设置预定义访问策略

以下代码展示如何为对象设置预定义访问策略:

# 引入模块
from obs import ObsClient
 
# 创建ObsClient实例
obsClient = ObsClient(
    access_key_id='*** Provide your Access Key ***',    
    secret_access_key='*** Provide your Secret Key ***',    
    server='https://your-endpoint'
)

# 设置对象访问权限为私有读写
resp = obsClient.setObjectAcl('bucketname', 'objectname', aclControl='private')
if resp.status < 300:
    print('requestId:', resp.requestId)
else:
    print('errorCode:', resp.errorCode)
    print('errorMessage:', resp.errorMessage)

直接设置对象访问权限

以下代码展示如何直接设置对象访问权限:

# 引入模块
from obs import ObsClient
 
# 创建ObsClient实例
obsClient = ObsClient(
    access_key_id='*** Provide your Access Key ***',    
    secret_access_key='*** Provide your Secret Key ***',    
    server='https://your-endpoint'
)

from obs import ACL
from obs import Owner
from obs import Grant, Permission
from obs import Grantee, Group
owner = Owner(owner_id='ownerid')

# 为指定用户设置完全控制权限
grant0 = Grant(grantee=Grantee(grantee_id='userid'), permission=Permission.FULL_CONTROL) 

# 为所有用户设置读权限
grant1 = Grant(grantee=Grantee(group=Group.ALL_USERS), permission=Permission.READ) 
 
acl = ACL(owner=owner, grants=[grant0, grant1])

resp = obsClient.setObjectAcl('bucketname', 'objectname', acl=acl)
if resp.status < 300:    
    print('requestId:', resp.requestId)
else:    
    print('errorCode:', resp.errorCode)    
    print('errorMessage:', resp.errorMessage)

所有者ID(owner_id)或者被授权用户ID(grantee_id),是指用户的账号ID,可通过OBS控制台“我的凭证”页面查看。

获取对象访问权限

您可以通过ObsClient.getObjectAcl获取对象的访问权限。以下代码展示如何获取对象访问权限:

# 引入模块
from obs import ObsClient
 
# 创建ObsClient实例
obsClient = ObsClient(
    access_key_id='*** Provide your Access Key ***',    
    secret_access_key='*** Provide your Secret Key ***',    
    server='https://your-endpoint'
)

resp = obsClient.getObjectAcl('bucketname', 'objectname')
if resp.status < 300:
    print('requestId:', resp.requestId)
    print('owner_id:', resp.body.owner.owner_id)
    print('owner_name:', resp.body.owner.owner_name)
    index = 1    
    for grant in resp.body.grants:        
        print('grant [' + str(index) + ']')        
        print('grantee_id:', grant.grantee.grantee_id)        
        print('grantee_name:', grant.grantee.grantee_name)        
        print('group:', grant.grantee.group)        
        print('permission:', grant.permission)        
        index += 1
else:
    print('errorCode:', resp.errorCode)
    print('errorMessage:', resp.errorMessage)
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区