本文介绍获取和设置对象的访问权限的示例代码。
对象的访问权限(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; }