文件访问权限(Object ACL)用于控制单个文件的访问。本文介绍如何使用 OSS C++ SDK V2 设置和获取文件访问权限。
注意事项
-
运行示例代码前,请将代码中的
<region>替换为实际的地域,如cn-hangzhou。 -
本文示例代码使用环境变量获取访问凭证。
-
设置和获取文件访问权限需要拥有
oss:PutObjectAcl和oss:GetObjectAcl权限。
文件访问权限类型
下表描述了文件支持的访问权限类型:
访问权限值 |
描述 |
|---|---|
|
继承 Bucket 的访问权限。文件的访问权限与其所在 Bucket 的访问权限一致。 |
|
私有。只有文件 Owner 或授权用户有该文件的读写权限,其他用户没有权限操作该文件。 |
|
公共读。只有文件 Owner 或授权用户有该文件的读写权限,其他用户(包括匿名访问者)只有文件的读权限。 |
|
公共读写。所有用户都有该文件的读写权限。 |
示例代码
设置文件ACL
以下代码演示如何设置指定文件的访问权限:
#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
oss::OSSClient client(conf);
auto outcome = client.putObjectAcl(
oss::models::PutObjectAclRequest()
.setBucket("examplebucket")
.setKey("exampleobject.txt")
.setObjectAcl("private"));
if (!outcome.has_value()) {
auto& e = outcome.error();
std::cerr << "设置文件ACL失败"
<< ", code: " << e.getCode()
<< ", message: " << e.getMessage()
<< ", requestId: " << e.getRequestId() << std::endl;
return 1;
}
auto& result = outcome.value();
std::cout << "设置文件ACL成功"
<< ", status: " << result.getStatusCode() << std::endl;
return 0;
}
获取文件ACL
以下代码演示如何获取指定文件的访问权限:
#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
oss::OSSClient client(conf);
auto outcome = client.getObjectAcl(
oss::models::GetObjectAclRequest()
.setBucket("examplebucket")
.setKey("exampleobject.txt"));
if (!outcome.has_value()) {
auto& e = outcome.error();
std::cerr << "获取文件ACL失败"
<< ", code: " << e.getCode()
<< ", message: " << e.getMessage()
<< ", requestId: " << e.getRequestId() << std::endl;
return 1;
}
auto& result = outcome.value();
auto& acp = result.getAccessControlPolicy();
std::cout << "获取文件ACL成功"
<< ", status: " << result.getStatusCode() << std::endl;
if (acp.owner) {
std::cout << "Owner Id: " << acp.owner->id.value_or("") << std::endl;
}
if (acp.accessControlList) {
std::cout << "ACL Grant: " << acp.accessControlList->grant.value_or("") << std::endl;
}
return 0;
}
相关文档
关于设置文件访问权限的完整示例代码,请参见PutObjectAcl.cpp。
关于获取文件访问权限的完整示例代码,请参见GetObjectAcl.cpp。
该文章对您有帮助吗?