lib/aliyun_oss/object/acl.ex

defmodule Aliyun.Oss.Object.ACL do
  @moduledoc """
  Object ACL 相关操作
  """

  import Aliyun.Oss.Object, only: [get_object: 4, put_object: 5]

  alias Aliyun.Oss.Client.{Response, Error}

  @type error() :: %Error{body: String.t(), status_code: integer(), parsed_details: map()} | atom()

  @doc """
  GetObjectACL 用来获取某个Bucket下的某个Object的访问权限。

  ## Examples

      iex> Aliyun.Oss.Object.ACL.get("some-bucket", "some-object")
      {:ok, %Aliyun.Oss.Client.Response{
          data: %{
            "AccessControlPolicy" => %{
              "AccessControlList" => %{"Grant" => "default"},
              "Owner" => %{
                "DisplayName" => "1111111111111111",
                "ID" => "1111111111111111"
              }
            }
          },
          headers: [
            {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"}
          ]
        }
      }
  """
  @spec get(String.t(), String.t()) :: {:error, error()} | {:ok, Response.t()}
  def get(bucket, object) do
    get_object(bucket, object, %{}, %{"acl" => nil})
  end

  @doc """
  PutObjectACL接口用于修改Object的访问权限。

  ## Examples

      iex> Aliyun.Oss.Object.ACL.put("some-bucket", "some-object", "private")
      {:ok, %Aliyun.Oss.Client.Response{
          data: "",
          headers: [
            {"Server", "AliyunOSS"},
            {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
            ...
          ]
        }
      }
  """
  @spec put(String.t(), String.t(), String.t()) :: {:error, error()} | {:ok, Response.t()}
  def put(bucket, object, acl) do
    put_object(bucket, object, "", %{"x-oss-object-acl" => acl}, %{"acl" => nil})
  end
end