docs-matrix-spec/locales/zh-Hans/rooms/fragments/v1-auth-rules.md
2025-04-20 16:13:37 +08:00

99 lines
No EOL
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

影响授权的状态事件类型包括:
- [`m.room.create`](/client-server-api#mroomcreate)
- [`m.room.member`](/client-server-api#mroommember)
- [`m.room.join_rules`](/client-server-api#mroomjoin_rules)
- [`m.room.power_levels`](/client-server-api#mroompower_levels)
- [`m.room.third_party_invite`](/client-server-api#mroomthird_party_invite)
{{% boxes/note %}}
如果未明确给出权限等级,则从默认值推断。
例如,提及 `sender` 的权限等级时,也可指代房间用户的默认权限等级。
{{% /boxes/note %}}
规则如下:
1. 若类型为 `m.room.create`
1. 若有任何 `prev_events`,则拒绝。
2.`room_id` 的域名与 `sender` 的域名不符,则拒绝。
3.`content.room_version` 存在但不是识别的版本,则拒绝。
4.`content` 没有 `creator` 属性,则拒绝。
5. 否则,允许。
2. 针对事件的 `auth_events`
1. 若某一 `type``state_key` 组合存在重复,则拒绝。
2. 若存在其 `type``state_key` 不符合 [认证事件选择](/server-server-api#auth-events-selection) 算法(详见服务器规范)的项,则拒绝。
3. 若有事件本身因 [接收 PDU 时执行的检查](/server-server-api/#checks-performed-on-receipt-of-a-pdu) 被拒绝,则拒绝。
4. 若未能在条目中找到 `m.room.create` 事件,则拒绝。
3. 若房间状态中的 `m.room.create` 事件的 `content` 包含 `m.federate` 属性且值为 `false`,且此事件的 `sender` 域名不与创建事件的 `sender` 域名一致,则拒绝。
4. 若类型为 `m.room.aliases`
1. 若事件无 `state_key`,则拒绝。
2. 若发送者域名与 `state_key` 不符,则拒绝。
3. 否则,允许。
5. 若类型为 `m.room.member`
1. 若没有 `state_key` 属性,或 `content` 中无 `membership` 属性,则拒绝。
2.`membership``join`
1. 若唯一的前序事件为 `m.room.create``state_key` 为创建者,则允许。
2.`sender``state_key` 不符,则拒绝。
3.`sender` 被封禁,则拒绝。
4.`join_rule``invite`,则当 `membership` 状态是 `invite``join` 时,允许。
5.`join_rule``public`,则允许。
6. 否则,拒绝。
3.`membership``invite`
1.`content` 含有 `third_party_invite` 属性:
1.*目标用户* 被封禁,则拒绝。
2.`content.third_party_invite``signed` 属性,则拒绝。
3.`signed``mxid``token` 属性,则拒绝。
4.`mxid``state_key` 不符,则拒绝。
5. 若当前房间状态中无 `state_key``token``m.room.third_party_invite` 事件,则拒绝。
6.`sender` 与该 `m.room.third_party_invite``sender` 不符,则拒绝。
7.`signed` 中的任意签名与该 `m.room.third_party_invite` 事件中的任一公钥匹配,则允许。公钥位于 `m.room.third_party_invite``content` 中:
1. 单个公钥存于 `public_key` 属性;
2. 公钥列表存于 `public_keys` 属性。
8. 否则,拒绝。
2.`sender` 当前成员状态不是 `join`,则拒绝。
3.*目标用户* 当前成员状态是 `join``ban`,则拒绝。
4.`sender` 权限等级大于或等于 *邀请等级*,则允许。
5. 否则,拒绝。
4.`membership``leave`
1.`sender``state_key` 匹配,则仅当其当前成员状态为 `invite``join` 时允许。
2.`sender` 当前成员状态不是 `join`,则拒绝。
3.*目标用户* 当前成员状态为 `ban``sender` 权限等级低于 *封禁等级*,则拒绝。
4.`sender` 权限等级大于等于 *踢人等级*,且 *目标用户* 权限等级小于 `sender` 权限等级,则允许。
5. 否则,拒绝。
5.`membership``ban`
1.`sender` 当前成员状态不是 `join`,则拒绝。
2.`sender` 权限等级大于等于 *封禁等级*,且 *目标用户* 权限等级低于 `sender` 权限等级,则允许。
3. 否则,拒绝。
6. 其他情况下,未知成员状态。拒绝。
6.`sender` 当前成员状态不是 `join`,则拒绝。
7. 若类型为 `m.room.third_party_invite`
1. 仅当 `sender` 当前权限等级大于等于 *邀请等级* 时允许。
8. 若事件类型的 *所需权限等级* 大于 `sender` 权限等级,则拒绝。
9. 若事件的 `state_key``@` 开头且与 `sender` 不符,则拒绝。
10. 若类型为 `m.room.power_levels`
1.`content``users` 属性不是键为有效用户ID且值为整数或整数字符串的对象则拒绝。
2. 若房间中没有前序的 `m.room.power_levels` 事件,则允许。
3. 针对 `users_default``events_default``state_default``ban``redact``kick``invite` 属性,在添加、更改或移除时,针对每个变动:
1. 若当前值大于 `sender` 当前权限等级,则拒绝。
2. 若新值大于 `sender` 当前权限等级,则拒绝。
4. 针对 `events` 属性中被更改或移除的每一项:
1. 若当前值大于 `sender` 当前权限等级,则拒绝。
5. 针对 `events` 属性中被添加或更改的每一项:
1. 若新值大于 `sender` 当前权限等级,则拒绝。
6. 针对 `users` 属性(除 `sender` 本人)的被更改或移除的每一项:
1. 若当前值大于等于 `sender` 当前权限等级,则拒绝。
7. 针对 `users` 属性被添加或更改的每一项:
1. 若新值大于 `sender` 当前权限等级,则拒绝。
8. 否则,允许。
11. 若类型为 `m.room.redaction`
1.`sender` 权限等级大于等于 *撤回等级*,则允许。
2. 若被撤回事件的 `event_id` 域名与 `m.room.redaction``event_id` 域名一致,则允许。
3. 否则,拒绝。
12. 否则,允许。
{{% boxes/note %}}
这些规则的部分后果:
- 除非你是房间成员,否则唯一被允许的操作(除首次创建/加入外)为:加入公共房间、接受或拒绝对房间的邀请。
- 取消封禁某人,你必须拥有大于等于踢人和封禁等级的权限,且你的权限等级高于目标用户。
{{% /boxes/note %}}