全部产品
Search
文档中心

Object Storage Service:Kelola ACL objek menggunakan OSS SDK untuk PHP 2.0

更新时间:Aug 06, 2025

Topik ini menjelaskan cara mengelola Daftar Kontrol Akses (ACL) objek menggunakan OSS SDK untuk PHP.

Catatan penggunaan

  • Kode contoh dalam topik ini menggunakan cn-hangzhou. Secara default, permintaan ke bucket menggunakan endpoint publik. Namun, jika Anda mengakses bucket dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan endpoint internal untuk performa dan keamanan yang lebih baik. Untuk informasi tentang wilayah dan endpoint OSS, lihat Wilayah dan Endpoint.

  • Untuk mengonfigurasi ACL untuk objek, Anda harus memiliki izin oss:PutObjectAcl. Untuk menanyakan ACL objek, Anda harus memiliki izin oss:GetObjectAcl. Untuk informasi lebih lanjut, lihat Lampirkan Kebijakan Kustom ke Pengguna RAM.

Jenis-jenis ACL

Tabel berikut menjelaskan ACL yang dapat dikonfigurasikan untuk sebuah objek.

ACL

Deskripsi

Nilai

Diwarisi dari bucket

ACL objek sama dengan ACL bucket tempat objek tersebut disimpan.

oss.ObjectACLDefault

Pribadi

Hanya pemilik objek dan pengguna yang berwenang yang memiliki izin baca dan tulis pada objek. Pengguna lain tidak dapat mengakses objek tersebut.

oss.ObjectACLPrivate

Publik-baca

Hanya pemilik objek dan pengguna yang berwenang yang memiliki izin baca dan tulis pada objek. Pengguna lain hanya memiliki izin baca pada objek. Berhati-hatilah saat menetapkan ACL objek ke nilai ini.

ObjectACLPublicRead

Publik-baca-tulis

Semua pengguna memiliki izin baca dan tulis pada objek. Berhati-hatilah saat menetapkan ACL objek ke nilai ini.

oss.ObjectACLPublicReadWrite

ACL objek memiliki prioritas lebih tinggi daripada ACL bucket tempat objek tersebut disimpan. Sebagai contoh, jika ACL objek dalam bucket pribadi diatur ke public-read, semua pengguna, termasuk pengguna anonim, dapat membaca objek tersebut. Jika ACL objek tidak dikonfigurasikan, ACL objek akan sama dengan ACL bucket tempat objek tersebut disimpan.

Kode contoh

1. Atur ACL objek.

<?php

require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True],
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False],
    "bucket" => ['help' => 'Nama bucket', 'required' => True],
    "key" => ['help' => 'Nama objek', 'required' => True],
];

// Buat array opsi panjang yang diperlukan oleh getopt. Contoh: --region:.
$longopts = array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Parse parameter baris perintah.
$options = getopt("", $longopts); 

// Periksa apakah parameter yang diperlukan hilang.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        // Cetak informasi bantuan dan keluar jika parameter yang diperlukan hilang.
        $help = $value['help'];
        echo "Error: argumen berikut diperlukan: --$key, $help\n";
        exit(1);
    }
}

// Ekstrak nilai-nilai parameter.
$region = $options["region"];
$bucket = $options["bucket"];
$key = $options["key"];

// Dapatkan kredensial akses (AccessKey ID dan AccessKey secret) dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);

// Jika parameter endpoint ditentukan, itu akan dikonfigurasi sebagai URL akses kustom.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Inisialisasi instance OSSClient.
$client = new Oss\Client($cfg);

// Buat objek PutObjectAclRequest dan tentukan nama bucket, kunci objek, dan ACL.
$request = new Oss\Models\PutObjectAclRequest($bucket, $key, Oss\Models\ObjectACLType::PUBLIC_READ);

// Setel ACL objek ke public-read.
$result = $client->putObjectAcl($request);

// Keluarkan kode status HTTP dan ID permintaan dari respons.
printf(
    'kode status:' . $result->statusCode . PHP_EOL .
    'ID permintaan:' . $result->requestId
);

2. Tanyakan ACL bucket.

<?php

// Masukkan file autoload untuk memuat pustaka dependen.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Tentukan deskripsi untuk parameter baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada', 'required' => True], // (Diperlukan) Tentukan wilayah tempat bucket berada.
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS', 'required' => False], // (Opsional) Tentukan endpoint OSS.
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // (Diperlukan) Tentukan nama bucket.
    "key" => ['help' => 'Nama objek', 'required' => True], // (Diperlukan) Tentukan nama objek.
];

// Hasilkan daftar opsi panjang untuk memparse parameter baris perintah.
$longopts = \array_map(function ($key) {
    return "$key:"; // Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
}, array_keys($optsdesc));

// Parse parameter baris perintah.
$options = getopt("", $longopts); 

// Periksa apakah parameter yang diperlukan hilang.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: argumen berikut diperlukan: --$key, $help"; // Tampilkan parameter yang diperlukan tetapi hilang.
        exit(1); 
    }
}

// Dapatkan nilai parameter baris perintah.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.

// Muat AccessKey ID dan AccessKey secret dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial.
$cfg->setCredentialsProvider($credentialsProvider);

// Tentukan wilayah.
$cfg->setRegion($region);

// Jika endpoint diberikan, tentukan endpoint.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Buat objek permintaan untuk mendapatkan ACL objek.
$request = new Oss\Models\GetObjectAclRequest(bucket: $bucket, key: $key);

// Gunakan metode getObjectAcl untuk menanyakan ACL objek.
$result = $client->getObjectAcl($request);

// Tampilkan hasilnya.
printf(
    'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP.
    'ID permintaan:' . $result->requestId . PHP_EOL . // ID permintaan.
    'acl:' . $result->accessControlList->grant // ACL objek.
);

Referensi

  • Untuk kode contoh lengkap yang digunakan untuk mengonfigurasi ACL objek, kunjungi GitHub.

  • Untuk informasi tentang operasi API yang dapat dipanggil untuk mengonfigurasi ACL objek, lihat PutObjectACL.

  • Untuk kode contoh lengkap yang digunakan untuk menanyakan ACL objek, kunjungi GitHub.

  • Untuk informasi tentang operasi API yang dapat dipanggil untuk menanyakan ACL objek, lihat GetObjectACL.