# 内置文件授权

内置文件方式允许你直接在配置文件中定义 ACL 规则。每当客户端尝试发布或订阅时，EMQX Edge 都会评估这些规则，并根据第一条匹配规则允许或拒绝该操作。

该方式不依赖外部服务，适用于简单、静态的权限配置。

:::tip 注意
内置文件中的 ACL 规则保存后不会立即生效。规则仅在 EMQX Edge 重启后生效。
:::

## 工作原理

ACL 规则使用 HOCON（一种 JSON 超集）语法编写，并按从上到下的顺序评估。一旦某条规则匹配，其权限结果就会被应用，后续规则会被忽略。每条规则可指定以下字段：

| Field | Required | Description |
|---|---|---|
| `permit` | 是 | 权限：`allow` 或 `deny`。 |
| `action` | 否 | 要控制的操作：`publish`、`subscribe` 或 `pubsub`。 |
| `topics` | 否 | 要匹配的主题过滤器列表。 |
| `username` | 否 | 要匹配的用户名。使用 `"#"` 匹配所有用户。 |
| `clientid` | 否 | 要匹配的 Client ID。使用 `"#"` 匹配所有客户端。 |
| `and` | 否 | 使用 AND 逻辑组合的规则列表。 |
| `or` | 否 | 使用 OR 逻辑组合的规则列表。 |

默认的最小规则集如下：

```text
rules = [
  {"permit": "allow", "username": "dashboard", "action": "subscribe", "topics": ["$SYS/#"]},
  {"permit": "deny",  "username": "#",          "action": "subscribe", "topics": ["$SYS/#", "#"]},
  {"permit": "allow"}
]
```

**规则说明：**

1. 允许用户名为 `dashboard` 的客户端订阅 `$SYS/#`。
2. 拒绝其他所有客户端订阅 `$SYS/#` 或 `#`。
3. 允许其他所有发布和订阅操作。

有关高级规则语法，包括主题占位符（`${clientid}`、`${username}`）以及使用 `@` 进行精确主题匹配，请参见[访问控制配置](../config-description/acl.md)。

## 通过 Dashboard 配置

1. 在 EMQX Edge Dashboard 中，进入 **Authorization** > **Default**。
2. 点击 **Settings**，并启用 **Enable Default Authorization**。该选项默认关闭。
3. 在编辑器面板中编辑 ACL 规则。
4. 点击 **Save**。
5. 重启 EMQX Edge 使变更生效。

![Authorization built-in file editor](./assets/authorization-file.png)

## 通过配置文件配置

在 `nanomq_acl.conf` 中编写 ACL 规则：

```text
rules = [
  {"permit": "allow", "username": "dashboard", "action": "subscribe", "topics": ["$SYS/#"]},
  {"permit": "deny",  "username": "#",          "action": "subscribe", "topics": ["$SYS/#", "#"]},
  {"permit": "allow"}
]
```

然后在 `nanomq.conf` 中引用该文件：

```hocon
auth {
  acl = {include "/etc/nanomq_acl.conf"}
}
```
