You need to enable JavaScript to run this app.
导航

管理对象的访问权限(PHP SDK)

最近更新时间2024.02.04 18:30:59

首次发布时间2022.11.16 14:58:44

本文介绍获取和设置对象的访问权限的示例代码。

ACL 说明

对象的访问权限(ACL)优先级高于桶的访问权限,如果对象未设置访问权限,则遵循桶的访问权限。通常通过预定义的枚举值设置对象的访问权限,当前支持的预定义枚举值如下:

访问权限预定义枚举值

描述

Tos\Model\Enum::ACLPrivate

私有。对象的所有者拥有所有权限,其他用户没有权限操作该对象。

Tos\Model\Enum::ACLPublicRead

公共读。对象的所有者拥有所有权限,其他用户只有改对象的读权限。

Tos\Model\Enum::ACLPublicReadWrite

公共读写。所有用户都有改对象文件的读写权限。

Tos\Model\Enum::ACLAuthenticatedRead

对象的所有者拥有所有权限,认证用户拥有该对象的读权限。

Tos\Model\Enum::ACLBucketOwnerRead

对象所有者拥有所有权限,桶所有者拥有此对象的读权限。

Tos\Model\Enum::ACLBucketOwnerFullControl

桶所有者和对象所有者都拥有对象的所有操作权限。

示例代码

您可以通过 TosClient->putObjectACL 和 TosClient->getObjectACL 来分别设置和获取对象的访问权限,示例代码如下:

<?php

// 假设使用 composer 安装
require_once __DIR__ . '/vendor/autoload.php';

use Tos\TosClient;
use Tos\Exception\TosClientException;
use Tos\Exception\TosServerException;
use Tos\Model\PutObjectACLInput;
use Tos\Model\GetObjectACLInput;
use Tos\Model\Enum;

try {
    $client = new TosClient([
        'region' => 'your region',
        'endpoint' => 'your endpoint',
        // 从环境变量中获取访问密钥
        'ak' => getenv('TOS_ACCESS_KEY'),
        'sk' => getenv('TOS_SECRET_KEY'),
    ]);
    
    // 设置对象访问权限
    $input = new PutObjectACLInput('bucket-test',  'key-test');
    $input->setACL(Enum::ACLPublicRead);
    $output = $client->putObjectACL($input);
    echo $output->getRequestId() . PHP_EOL;
    
    // 获取对象访问权限
    $output = $client->getObjectACL(new GetObjectACLInput($bucket, $key));
    echo $output->getRequestId() . PHP_EOL;
    // 获取访问权限授权组
    foreach ($output->getGrants() as $grant) {
        echo $grant->getGrantee()->getType() . PHP_EOL;
        echo $grant->getGrantee()->getCanned() . PHP_EOL;
        echo $grant->getPermission() .PHP_EOL;
    }
    // 获取对象 Owner
    echo $output->getOwner()->getID() . PHP_EOL;
    
} catch (TosClientException $ex) {
    echo $ex->getMessage() . PHP_EOL;
} catch (TosServerException $ex) {
    echo $ex->getRequestId() . PHP_EOL;
    echo $ex->getStatusCode() . PHP_EOL;
    echo $ex->getErrorCode() . PHP_EOL;
}