public async Task GetAccessModeAsync()

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;
    }