本文介紹如何使用Go SDK V2設置并獲取文件的訪問權限(ACL)。
注意事項
本文示例代碼以華東1(杭州)的地域ID
cn-hangzhou
為例,默認使用外網Endpoint,如果您希望通過與OSS同地域的其他阿里云產品訪問OSS,請使用內網Endpoint。關于OSS支持的Region與Endpoint的對應關系,請參見OSS地域和訪問域名。本文以從環境變量讀取訪問憑證為例。如何配置訪問憑證,請參見配置訪問憑證。
要設置Object訪問權限,您必須具有
oss:PutObjectAcl
權限;要獲取Object訪問權限,您必須具有oss:GetObjectAcl
權限。具體操作,請參見為RAM用戶授權自定義的權限策略。
讀寫權限類型
文件的訪問權限(ACL)有以下四種:
訪問權限 | 描述 | 訪問權限值 |
繼承Bucket | 文件遵循存儲空間的訪問權限。 | oss.ObjectACLDefault |
私有 | 文件的擁有者和授權用戶有該文件的讀寫權限,其他用戶沒有權限操作該文件。 | oss.ObjectACLPrivate |
公共讀 | 文件的擁有者和授權用戶有該文件的讀寫權限,其他用戶只有文件的讀權限。請謹慎使用該權限。 | ObjectACLPublicRead |
公共讀寫 | 所有用戶都有該文件的讀寫權限。請謹慎使用該權限。 | oss.ObjectACLPublicReadWrite |
文件的訪問權限優先級高于存儲空間的訪問權限。例如存儲空間的訪問權限是私有,而文件的訪問權限是公共讀寫,則所有用戶都有該文件的讀寫權限。如果某個文件沒有設置過訪問權限,則遵循存儲空間的訪問權限。
示例代碼
您可以使用以下代碼設置并獲取文件的訪問權限。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定義全局變量
var (
region string // 存儲區域
bucketName string // 存儲空間名稱
objectName string // 對象名稱
)
// init函數用于初始化命令行參數
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
flag.StringVar(&objectName, "object", "", "The name of the object.")
}
func main() {
// 解析命令行參數
flag.Parse()
// 檢查region是否為空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 檢查bucket名稱是否為空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 檢查object名稱是否為空
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// 加載默認配置并設置憑證提供者和區域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 創建OSS客戶端
client := oss.NewClient(cfg)
// 創建設置對象ACL的請求
putRequest := &oss.PutObjectAclRequest{
Bucket: oss.Ptr(bucketName), // 存儲空間名稱
Key: oss.Ptr(objectName), // 對象名稱
Acl: oss.ObjectACLPrivate, // 設置對象的訪問權限為私有
}
// 執行設置對象ACL的操作
putResult, err := client.PutObjectAcl(context.TODO(), putRequest)
if err != nil {
log.Fatalf("failed to put object acl %v", err)
}
// 打印設置對象ACL的結果
log.Printf("put object acl result:%#v\n", putResult)
// 創建獲取對象ACL(訪問控制列表)的請求
getRequest := &oss.GetObjectAclRequest{
Bucket: oss.Ptr(bucketName), // 存儲空間名稱
Key: oss.Ptr(objectName), // 對象名稱
}
// 執行獲取對象ACL的操作
getResult, err := client.GetObjectAcl(context.TODO(), getRequest)
if err != nil {
log.Fatalf("failed to get object acl %v", err)
}
// 打印獲取對象ACL的結果
log.Printf("get object acl result:%#v\n", getResult)
}
相關文檔
關于設置文件讀寫權限的完整示例代碼,請參見GitHub示例。
關于設置文件讀寫權限的API接口,請參見PutObjectAcl。
關于獲取文件讀寫權限的完整示例代碼,請參見GitHub示例。
關于獲取文件讀寫權限的API接口,請參見GetObjectAcl。