管理文件访问权限(C++ SDK V2)

更新时间:
复制为 MD 格式

文件访问权限(Object ACL)用于控制单个文件的访问。本文介绍如何使用 OSS C++ SDK V2 设置和获取文件访问权限。

注意事项

  • 运行示例代码前,请将代码中的 <region> 替换为实际的地域,如 cn-hangzhou

  • 本文示例代码使用环境变量获取访问凭证。

  • 设置和获取文件访问权限需要拥有 oss:PutObjectAcloss:GetObjectAcl 权限。

文件访问权限类型

下表描述了文件支持的访问权限类型:

访问权限值

描述

default

继承 Bucket 的访问权限。文件的访问权限与其所在 Bucket 的访问权限一致。

private

私有。只有文件 Owner 或授权用户有该文件的读写权限,其他用户没有权限操作该文件。

public-read

公共读。只有文件 Owner 或授权用户有该文件的读写权限,其他用户(包括匿名访问者)只有文件的读权限。

public-read-write

公共读写。所有用户都有该文件的读写权限。

示例代码

设置文件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