获取对象访问权限

GetACL操作可以获取对象的access control list(ACL)信息。对象的ACL可以在上传对象的时候设置并且通过API查看,用户需要具有READ_ACP(读取bucket ACL信息)权限才可以查询对象的ACL信息。

代码示例:

using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;

namespace DotNetSDK.ObjectOperation
{
    public class GetObjectACLExample
    {
        public static async Task GetObjectACL()
        {
            var accessKey = "YOUR_ACCESS_KEY";
            var secretKey = "YOUR_SECRET_KEY";
            var endpoint = "YOUR_ENDPOINT";
            var bucketName = "EXAMPLE_BUCKET";
            var key = "EXAMPLE_KEY";
            try
            {
                var credentials = new BasicAWSCredentials(accessKey, secretKey);
                var conf = new AmazonS3Config
                {
                    ServiceURL = endpoint
                };
                var s3Client = new AmazonS3Client(credentials, conf);
                var getAclRequest = new GetACLRequest()
                {
                    BucketName = bucketName,
                    Key = key
                };
                var result = await s3Client.GetACLAsync(getAclRequest);
                if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
                {
                    Console.WriteLine("fail to get ACL of bucket {0}, HttpStatusCode:{1}, ErrorCode:{2}.", bucketName, (int) result.HttpStatusCode, result.HttpStatusCode);
                    return;
                }

                foreach (var grant in result.AccessControlList.Grants)
                {
                    Console.WriteLine("Type:{0}, CanonicalUser:{1}, DisplayName:{2}, EmailAddress:{3}, URI:{4}, Permission:{5}",
                        grant.Grantee.Type, grant.Grantee.CanonicalUser, grant.Grantee.DisplayName, grant.Grantee.EmailAddress, grant.Grantee.URI, grant.Permission.Value);
                }

                Console.WriteLine("OwnerId:{0}, OwnerDisplayName:{1}.", result.AccessControlList.Owner.Id, result.AccessControlList.Owner.DisplayName);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

GetACLRequest可设置的参数如下:

参数 类型 说明 是否必要
BucketName string bucket的名称。
Key string 对象的key。
VersionId string 设置对象的版本id。

GetACL返回的结果如下:

属性名 类型 说明
Grants List<S3Grant> Grant信息的数组,包含了每项授权和被授予人的信息。
Owner Owner 对象的所有者信息。

 响应结果:

HTTP状态码 响应码 描述
200 OK 操作成功。
403 Forbidden 用户没有权限执行操作。
404 NotFound 操作指定的bucket或者对象不存在。