## 访问控制(ACL) (`acls`)

按 IP/CIDR 等条件放行或拦截请求的规则集;平台提供内置规则,租户可自建。

鉴权: 用户（部分参数仅管理员） · 文档: https://www-demo.kuxitong.com/zh/docs/api/acls

### GET `/api/v2/acls`

列出ACL · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |
| `sort` | string |  | 排序字段,逗号分隔,前缀 `-` 表示降序,如 `-created_at,id`。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `enabled` | boolean |  | 按启用状态过滤。 |
| `name` | string |  | 按名称包含过滤。 |
| `owner` | string |  | platform = 只看平台对象;tenant = 只看租户对象。 可选值: ["platform","tenant"] |

```sh
curl "https://panel.example.com/api/v2/acls" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/acls`

创建ACL · 鉴权: 用户（部分参数仅管理员）

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `default_action` | string | 有 | 都不命中时的动作。 可选值: ["allow","deny"] |
| `des` | string |  | 备注;不给则为空(修改时不给也清空,整体替换)。 |
| `enabled` | boolean |  | 是否启用 默认: true |
| `name` | string | 有 | 名称 |
| `rules` | AclRule[] | 有 | 按序匹配;条数受配置 protect.acl_rules_max 约束。 |
| `tenant_id` | integer |  | 所属租户;null = 平台对象(内置或管理员建,租户只读)。 |

```sh
curl -X POST "https://panel.example.com/api/v2/acls" \
  -H "X-API-Key: $GOCDN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"default_action":"deny","name":"office","rules":[{"action":"allow","when":{"f":"ip","op":"cidr","v":["192.0.2.0/24"]}}]}'
```

### POST `/api/v2/acls/batch-enable`

批量启用或禁用ACL · 鉴权: 用户（部分参数仅管理员）

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `enabled` | boolean | 有 | 是否启用 默认: true |
| `ids` | integer[] | 有 | 要改的对象 id,至多 100 个。 |

```sh
curl -X POST "https://panel.example.com/api/v2/acls/batch-enable" \
  -H "X-API-Key: $GOCDN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled":false,"ids":[1,2]}'
```

### GET `/api/v2/acls/{id}`

获取ACL · 鉴权: 用户（部分参数仅管理员）

```sh
curl "https://panel.example.com/api/v2/acls/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### PUT `/api/v2/acls/{id}`

修改ACL · 鉴权: 用户（部分参数仅管理员）

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `default_action` | string | 有 | 都不命中时的动作。 可选值: ["allow","deny"] |
| `des` | string |  | 备注;不给则为空(修改时不给也清空,整体替换)。 |
| `enabled` | boolean |  | 是否启用 默认: true |
| `name` | string | 有 | 名称 |
| `rules` | AclRule[] | 有 | 按序匹配;条数受配置 protect.acl_rules_max 约束。 |
| `tenant_id` | integer |  | 所属租户;null = 平台对象(内置或管理员建,租户只读)。 |

```sh
curl -X PUT "https://panel.example.com/api/v2/acls/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"default_action":"deny","name":"office","rules":[{"action":"allow","when":{"f":"ip","op":"cidr","v":["192.0.2.0/24"]}}]}'
```

### DELETE `/api/v2/acls/{id}`

删除ACL · 鉴权: 用户（部分参数仅管理员）

```sh
curl -X DELETE "https://panel.example.com/api/v2/acls/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

访问控制(ACL)对象:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `builtin` | boolean |  | 内置对象,不可删。 (只读) |
| `created_at` | string |  | 创建时间 (只读) |
| `default_action` | string |  | 都不命中时的动作。 可选值: ["allow","deny"] |
| `des` | string |  | 备注;不给则为空(修改时不给也清空,整体替换)。 |
| `enabled` | boolean |  | 是否启用 默认: true |
| `errors` | FieldError[] |  | 没改的逐条原因;field 为 /ids/<下标>,code 同单条修改接口(not_found、readonly 等)。 |
| `id` | integer |  | 记录 ID (只读) |
| `ids` | integer[] | 有 | 要改的对象 id,至多 100 个。 |
| `name` | string |  | 名称 |
| `rules` | AclRule[] |  | 按序匹配;条数受配置 protect.acl_rules_max 约束。 |
| `tenant_id` | integer |  | 所属租户;null = 平台对象(内置或管理员建,租户只读)。 (只读) |
| `updated` | integer[] |  | 已改好的 id(含本来就是目标状态的),按请求顺序。 |
| `updated_at` | string |  | 更新时间 (只读) |
