in Core/src/Impl/Storages/AwsS3Storage.cs [127:156]
public async Task<AccessMode> GetAccessModeAsync(SymbolStoragePath file)
{
var key = SymbolPathToAwsKey(file);
if (!mySupportAcl)
return AccessMode.Unknown;
var respond = await myS3Client.GetObjectAclAsync(new GetObjectAclRequest()
{
BucketName = myBucketName,
Key = key
});
var hasUnknown = false;
var hasReadPublic = false;
var hasFullControlOwner = false;
var ownerId = respond.Owner.Id;
foreach (var grant in respond.Grants)
{
var grantee = grant.Grantee;
if (grantee.Type == GranteeType.Group && grantee.URI == AwsS3GroupUriAllUsers && grant.Permission == S3Permission.READ)
hasReadPublic = true;
else if (grantee.Type == GranteeType.CanonicalUser && grantee.CanonicalUser == ownerId && grant.Permission == S3Permission.FULL_CONTROL)
hasFullControlOwner = true;
else
hasUnknown = true;
}
if (hasUnknown || !hasFullControlOwner)
return AccessMode.Unknown;
return hasReadPublic ? AccessMode.Public : AccessMode.Private;
}