@Override
  public TableOperations temp(TableMetadata uncommittedMetadata) {
    TableOperations temp = ops.temp(uncommittedMetadata);
    return new TableOperations() {
      @Override
      public TableMetadata current() {
        return authenticatedFileIO.doAs(temp::current);
      }

      @Override
      public TableMetadata refresh() {
        return authenticatedFileIO.doAs(temp::refresh);
      }

      @Override
      public void commit(TableMetadata base, TableMetadata metadata) {
        authenticatedFileIO.doAs(
            () -> {
              temp.commit(base, metadata);
              return null;
            });
      }

      @Override
      public FileIO io() {
        return authenticatedFileIO;
      }

      @Override
      public String metadataFileLocation(String fileName) {
        return authenticatedFileIO.doAs(() -> temp.metadataFileLocation(fileName));
      }

      @Override
      public LocationProvider locationProvider() {
        return authenticatedFileIO.doAs(temp::locationProvider);
      }
    };
  }
A wrapper class around {@link TableOperations}. Add authentication for all methods.
amoro-format-iceberg/src/main/java/org/apache/amoro/op/MixedTableOperations.java