# `LibOss.Core.Acl`
[🔗](https://github.com/tt67wq/lib-oss/blob/main/lib/lib_oss/core/acl.ex#L1)

ACL管理模块

负责：
- 对象ACL：put_object_acl, get_object_acl
- 存储桶ACL：put_bucket_acl, get_bucket_acl
- ACL验证逻辑

# `err_t`

```elixir
@type err_t() :: {:error, LibOss.Exception.t()}
```

# `acl_to_description`

```elixir
@spec acl_to_description(LibOss.Typespecs.acl()) :: String.t()
```

将ACL字符串转换为权限描述

## 参数
- acl: ACL值

## 返回值
- String.t()

## 示例
    iex> LibOss.Core.Acl.acl_to_description("public-read")
    "Public read access"

# `get_bucket_acl`

```elixir
@spec get_bucket_acl(module(), LibOss.Typespecs.bucket()) :: {:ok, map()} | err_t()
```

获取存储桶ACL

## 参数
- name: Agent进程名称
- bucket: 存储桶名称

## 返回值
- `{:ok, map()} | {:error, Exception.t()}`

返回的map包含：
- owner: 所有者信息
- access_control_list: 访问控制列表

## 示例
    iex> LibOss.Core.Acl.get_bucket_acl(MyOss, "my-bucket")
    {:ok, %{
      owner: %{id: "owner-id", display_name: "owner-name"},
      access_control_list: [%{permission: "FULL_CONTROL", ...}]
    }}

# `get_object_acl`

```elixir
@spec get_object_acl(module(), LibOss.Typespecs.bucket(), LibOss.Typespecs.object()) ::
  {:ok, map()} | err_t()
```

获取对象ACL

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 对象名称

## 返回值
- `{:ok, map()} | {:error, Exception.t()}`

返回的map包含：
- owner: 所有者信息
- access_control_list: 访问控制列表

## 示例
    iex> LibOss.Core.Acl.get_object_acl(MyOss, "my-bucket", "my-object")
    {:ok, %{
      owner: %{id: "owner-id", display_name: "owner-name"},
      access_control_list: [%{permission: "FULL_CONTROL", ...}]
    }}

# `public_readable?`

```elixir
@spec public_readable?(LibOss.Typespecs.acl()) :: boolean()
```

检查ACL是否为公共可读

## 参数
- acl: ACL值

## 返回值
- boolean()

## 示例
    iex> LibOss.Core.Acl.public_readable?("public-read")
    true

    iex> LibOss.Core.Acl.public_readable?("private")
    false

# `public_writable?`

```elixir
@spec public_writable?(LibOss.Typespecs.acl()) :: boolean()
```

检查ACL是否为公共可写

## 参数
- acl: ACL值

## 返回值
- boolean()

## 示例
    iex> LibOss.Core.Acl.public_writable?("public-read-write")
    true

    iex> LibOss.Core.Acl.public_writable?("public-read")
    false

# `put_bucket_acl`

```elixir
@spec put_bucket_acl(module(), LibOss.Typespecs.bucket(), LibOss.Typespecs.acl()) ::
  :ok | err_t()
```

设置存储桶ACL

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- acl: ACL权限值

## ACL权限值
- "private": 私有权限
- "public-read": 公共读权限
- "public-read-write": 公共读写权限

## 返回值
- :ok | {:error, Exception.t()}

## 示例
    iex> LibOss.Core.Acl.put_bucket_acl(MyOss, "my-bucket", "public-read")
    :ok

# `put_object_acl`

```elixir
@spec put_object_acl(
  module(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  LibOss.Typespecs.acl()
) :: :ok | err_t()
```

设置对象ACL

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 对象名称
- acl: ACL权限值

## ACL权限值
- "private": 私有权限
- "public-read": 公共读权限
- "public-read-write": 公共读写权限
- "default": 继承存储桶权限

## 返回值
- :ok | {:error, Exception.t()}

## 示例
    iex> LibOss.Core.Acl.put_object_acl(MyOss, "my-bucket", "my-object", "public-read")
    :ok

# `valid_acls`

```elixir
@spec valid_acls() :: [String.t()]
```

获取有效的ACL值列表

## 返回值
- [String.t()]

## 示例
    iex> LibOss.Core.Acl.valid_acls()
    ["private", "public-read", "public-read-write", "default"]

# `validate_acl`

```elixir
@spec validate_acl(LibOss.Typespecs.acl()) :: :ok | {:error, LibOss.Exception.t()}
```

验证ACL值是否有效

## 参数
- acl: 要验证的ACL值

## 返回值
- :ok | {:error, Exception.t()}

## 示例
    iex> LibOss.Core.Acl.validate_acl("public-read")
    :ok

    iex> LibOss.Core.Acl.validate_acl("invalid-acl")
    {:error, %LibOss.Exception{}}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
